diff --git a/add-canonical-metatag.php b/add-canonical-metatag.php
index 018c92e..40482f8 100644
--- a/add-canonical-metatag.php
+++ b/add-canonical-metatag.php
@@ -17,10 +17,12 @@
     'add-ga-tracking-code' --> Usually the API docs comes without Google Analytics tracking code. This action adds the code.
     'add-noindex' --> Adds metatag that avoids crawlers to index this page.
     'remove-noindex' --> Removes robots NOINDEX metatag
+    'add-luckyorange-tracking-code' --> 
+    'add-yandexmetrica-tracking-code' --> 
  */
 $work_directories = [ 
-    $base_path.'/releases/2.9.0' => [ 'add-noindex', 'remove-canonical', 'add-canonical'],
-    $base_path.'/releases/2.9.1' => [ 'set-as-latest', 'add-ga-tracking-code']
+    // $base_path.'/releases/2.9.0' => [ 'add-noindex', 'remove-canonical', 'add-canonical'],
+    $base_path.'/releases/2.9.1' => [ 'set-as-latest', 'add-ga-tracking-code', 'add-luckyorange-tracking-code', 'add-yandexmetrica-tracking-code']
     ];
 
 
@@ -53,6 +55,14 @@
                 case('add-ga-tracking-code'):
                     $docHtmlFile->addAnalyticsTrackingCode();
                     break;
+                
+                case('add-luckyorange-tracking-code'):
+                    $docHtmlFile->addLuckyOrangeTrackingCode();
+                    break;
+                    
+                case('add-yandexmetrica-tracking-code'):
+                    $docHtmlFile->addYandexMetricaTrackingCode();
+                    break;
                 case('add-noindex'):
                     $docHtmlFile->addNoindexTag();
                     break;
diff --git a/lib/ApiDocumentationHtmlFile.php b/lib/ApiDocumentationHtmlFile.php
index fb7411d..fe756c4 100644
--- a/lib/ApiDocumentationHtmlFile.php
+++ b/lib/ApiDocumentationHtmlFile.php
@@ -13,16 +13,40 @@
 
     public $GAPropertyId = 'UA-61232409-1';
 
-    protected $GAtrackingCode = "<script>
-  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
-  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
-  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
-  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+    protected $GAtrackingCode = '<script async src="https://www.googletagmanager.com/gtag/js?id=UA-61232409-1"></script>
+    <script>
+      window.dataLayer = window.dataLayer || [];
+      function gtag(){dataLayer.push(arguments);}
+      gtag(\'js\', new Date());
+    
+      gtag(\'config\', \'__GA_PROPERTY_ID__\');
+    </script>';
 
-  ga('create', '__GA_PROPERTY_ID__', 'auto');
-  ga('send', 'pageview');
+    protected $LuckyOrangeTrackingCode = "<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>";
 
-</script>";
+    protected $yandexMetricaTrackingCode = '<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->';
 
 
     public function __construct(\SplFileInfo $file)
@@ -88,6 +112,33 @@
 
     }
 
+    public function hasYandexTrackingCode()
+    {
+        return strpos($this->getContent(), $this->yandexMetricaTrackingCode) !== false;
+    }
+
+    public function hasLuckyOrangeCode()
+    {
+        return strpos($this->getContent(), $this->LuckyOrangeTrackingCode) !== false;
+    }
+
+    public function addYandexMetricaTrackingCode()
+    {
+        if(!$this->hasYandexTrackingCode()){
+            
+            $this->fileContent = str_ireplace('<head>', '<head>'.PHP_EOL.$this->yandexMetricaTrackingCode, $this->getContent());
+            if($this->_debug) print 'YandexMetrica tracking code added.'.PHP_EOL;
+        }
+    }
+
+    public function addLuckyOrangeTrackingCode()
+    {
+        if(!$this->hasLuckyOrangeCode()){
+            $this->fileContent = str_ireplace('<head>', '<head>'.PHP_EOL.$this->LuckyOrangeTrackingCode, $this->getContent());
+            if($this->_debug) print 'LuckyOrange tracking code added.'.PHP_EOL;
+        }
+    }
+
     public function hasNoindexTag()
     {
         return strpos($this->getContent(), $this->noIndexMetaStr) !== false;
diff --git a/releases/2.9.1/cppdoc/annotated.html b/releases/2.9.1/cppdoc/annotated.html
index 8134d7c..6bcb17e 100644
--- a/releases/2.9.1/cppdoc/annotated.html
+++ b/releases/2.9.1/cppdoc/annotated.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/annotated.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/binary_8h.html b/releases/2.9.1/cppdoc/binary_8h.html
index 2b132b7..5257831 100644
--- a/releases/2.9.1/cppdoc/binary_8h.html
+++ b/releases/2.9.1/cppdoc/binary_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/binary_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/binary_8h_source.html b/releases/2.9.1/cppdoc/binary_8h_source.html
index 1820700..a5bfed1 100644
--- a/releases/2.9.1/cppdoc/binary_8h_source.html
+++ b/releases/2.9.1/cppdoc/binary_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/binary_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/binary__consts_8h.html b/releases/2.9.1/cppdoc/binary__consts_8h.html
index 1aab649..d8c34ac 100644
--- a/releases/2.9.1/cppdoc/binary__consts_8h.html
+++ b/releases/2.9.1/cppdoc/binary__consts_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/binary__consts_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/binary__consts_8h_source.html b/releases/2.9.1/cppdoc/binary__consts_8h_source.html
index 7c164df..23950ad 100644
--- a/releases/2.9.1/cppdoc/binary__consts_8h_source.html
+++ b/releases/2.9.1/cppdoc/binary__consts_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/binary__consts_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/binary__containers_8h.html b/releases/2.9.1/cppdoc/binary__containers_8h.html
index bdddaac..203d15d 100644
--- a/releases/2.9.1/cppdoc/binary__containers_8h.html
+++ b/releases/2.9.1/cppdoc/binary__containers_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/binary__containers_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/binary__containers_8h_source.html b/releases/2.9.1/cppdoc/binary__containers_8h_source.html
index be1f95e..d56ed7e 100644
--- a/releases/2.9.1/cppdoc/binary__containers_8h_source.html
+++ b/releases/2.9.1/cppdoc/binary__containers_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/binary__containers_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/binary__enum_8h.html b/releases/2.9.1/cppdoc/binary__enum_8h.html
index 817c3ee..e087826 100644
--- a/releases/2.9.1/cppdoc/binary__enum_8h.html
+++ b/releases/2.9.1/cppdoc/binary__enum_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/binary__enum_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/binary__enum_8h_source.html b/releases/2.9.1/cppdoc/binary__enum_8h_source.html
index 611f26a..6f6442f 100644
--- a/releases/2.9.1/cppdoc/binary__enum_8h_source.html
+++ b/releases/2.9.1/cppdoc/binary__enum_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/binary__enum_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/binary__enum__entry_8h.html b/releases/2.9.1/cppdoc/binary__enum__entry_8h.html
index 814dfe0..34685a7 100644
--- a/releases/2.9.1/cppdoc/binary__enum__entry_8h.html
+++ b/releases/2.9.1/cppdoc/binary__enum__entry_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/binary__enum__entry_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/binary__enum__entry_8h_source.html b/releases/2.9.1/cppdoc/binary__enum__entry_8h_source.html
index ad47a19..f4b8ff7 100644
--- a/releases/2.9.1/cppdoc/binary__enum__entry_8h_source.html
+++ b/releases/2.9.1/cppdoc/binary__enum__entry_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/binary__enum__entry_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/binary__object_8h.html b/releases/2.9.1/cppdoc/binary__object_8h.html
index 53e0d69..b85d925 100644
--- a/releases/2.9.1/cppdoc/binary__object_8h.html
+++ b/releases/2.9.1/cppdoc/binary__object_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/binary__object_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/binary__object_8h_source.html b/releases/2.9.1/cppdoc/binary__object_8h_source.html
index 6a60f21..909aa22 100644
--- a/releases/2.9.1/cppdoc/binary__object_8h_source.html
+++ b/releases/2.9.1/cppdoc/binary__object_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/binary__object_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/binary__raw__reader_8h.html b/releases/2.9.1/cppdoc/binary__raw__reader_8h.html
index 8a3533c..45cc46c 100644
--- a/releases/2.9.1/cppdoc/binary__raw__reader_8h.html
+++ b/releases/2.9.1/cppdoc/binary__raw__reader_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/binary__raw__reader_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/binary__raw__reader_8h_source.html b/releases/2.9.1/cppdoc/binary__raw__reader_8h_source.html
index 5ea498a..b08caf8 100644
--- a/releases/2.9.1/cppdoc/binary__raw__reader_8h_source.html
+++ b/releases/2.9.1/cppdoc/binary__raw__reader_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/binary__raw__reader_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/binary__raw__writer_8h.html b/releases/2.9.1/cppdoc/binary__raw__writer_8h.html
index ffbd41a..1c988c8 100644
--- a/releases/2.9.1/cppdoc/binary__raw__writer_8h.html
+++ b/releases/2.9.1/cppdoc/binary__raw__writer_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/binary__raw__writer_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/binary__raw__writer_8h_source.html b/releases/2.9.1/cppdoc/binary__raw__writer_8h_source.html
index cb8a3dc..c6c6ac1 100644
--- a/releases/2.9.1/cppdoc/binary__raw__writer_8h_source.html
+++ b/releases/2.9.1/cppdoc/binary__raw__writer_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/binary__raw__writer_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/binary__reader_8h.html b/releases/2.9.1/cppdoc/binary__reader_8h.html
index c28bb40..5f039f1 100644
--- a/releases/2.9.1/cppdoc/binary__reader_8h.html
+++ b/releases/2.9.1/cppdoc/binary__reader_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/binary__reader_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/binary__reader_8h_source.html b/releases/2.9.1/cppdoc/binary__reader_8h_source.html
index 296429c..b2bc42f 100644
--- a/releases/2.9.1/cppdoc/binary__reader_8h_source.html
+++ b/releases/2.9.1/cppdoc/binary__reader_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/binary__reader_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/binary__type_8h.html b/releases/2.9.1/cppdoc/binary__type_8h.html
index 48d93c3..3f90f98 100644
--- a/releases/2.9.1/cppdoc/binary__type_8h.html
+++ b/releases/2.9.1/cppdoc/binary__type_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/binary__type_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/binary__type_8h_source.html b/releases/2.9.1/cppdoc/binary__type_8h_source.html
index fe472c1..159e765 100644
--- a/releases/2.9.1/cppdoc/binary__type_8h_source.html
+++ b/releases/2.9.1/cppdoc/binary__type_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/binary__type_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/binary__writer_8h.html b/releases/2.9.1/cppdoc/binary__writer_8h.html
index df64113..8ff8be8 100644
--- a/releases/2.9.1/cppdoc/binary__writer_8h.html
+++ b/releases/2.9.1/cppdoc/binary__writer_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/binary__writer_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/binary__writer_8h_source.html b/releases/2.9.1/cppdoc/binary__writer_8h_source.html
index d232e8c..185e03e 100644
--- a/releases/2.9.1/cppdoc/binary__writer_8h_source.html
+++ b/releases/2.9.1/cppdoc/binary__writer_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/binary__writer_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/cache_8h.html b/releases/2.9.1/cppdoc/cache_8h.html
index f06d342..e1a4bb8 100644
--- a/releases/2.9.1/cppdoc/cache_8h.html
+++ b/releases/2.9.1/cppdoc/cache_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/cache_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/cache_8h_source.html b/releases/2.9.1/cppdoc/cache_8h_source.html
index d3e914c..2309954 100644
--- a/releases/2.9.1/cppdoc/cache_8h_source.html
+++ b/releases/2.9.1/cppdoc/cache_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/cache_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/cache__client_8h.html b/releases/2.9.1/cppdoc/cache__client_8h.html
index 3386af8..c880902 100644
--- a/releases/2.9.1/cppdoc/cache__client_8h.html
+++ b/releases/2.9.1/cppdoc/cache__client_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/cache__client_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/cache__client_8h_source.html b/releases/2.9.1/cppdoc/cache__client_8h_source.html
index 81a1e70..7fd0c10 100644
--- a/releases/2.9.1/cppdoc/cache__client_8h_source.html
+++ b/releases/2.9.1/cppdoc/cache__client_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/cache__client_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/cache__entry_8h.html b/releases/2.9.1/cppdoc/cache__entry_8h.html
index 11e708c..a08e544 100644
--- a/releases/2.9.1/cppdoc/cache__entry_8h.html
+++ b/releases/2.9.1/cppdoc/cache__entry_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/cache__entry_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/cache__entry_8h_source.html b/releases/2.9.1/cppdoc/cache__entry_8h_source.html
index fd766d0..80af922 100644
--- a/releases/2.9.1/cppdoc/cache__entry_8h_source.html
+++ b/releases/2.9.1/cppdoc/cache__entry_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/cache__entry_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/cache__entry__event_8h.html b/releases/2.9.1/cppdoc/cache__entry__event_8h.html
index 30f3cfb..51d31e4 100644
--- a/releases/2.9.1/cppdoc/cache__entry__event_8h.html
+++ b/releases/2.9.1/cppdoc/cache__entry__event_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/cache__entry__event_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/cache__entry__event_8h_source.html b/releases/2.9.1/cppdoc/cache__entry__event_8h_source.html
index f9f221c..7c80942 100644
--- a/releases/2.9.1/cppdoc/cache__entry__event_8h_source.html
+++ b/releases/2.9.1/cppdoc/cache__entry__event_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/cache__entry__event_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/cache__entry__event__filter_8h.html b/releases/2.9.1/cppdoc/cache__entry__event__filter_8h.html
index 570ccab..b8ec009 100644
--- a/releases/2.9.1/cppdoc/cache__entry__event__filter_8h.html
+++ b/releases/2.9.1/cppdoc/cache__entry__event__filter_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/cache__entry__event__filter_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/cache__entry__event__filter_8h_source.html b/releases/2.9.1/cppdoc/cache__entry__event__filter_8h_source.html
index 0e5ad6d..7a00f40 100644
--- a/releases/2.9.1/cppdoc/cache__entry__event__filter_8h_source.html
+++ b/releases/2.9.1/cppdoc/cache__entry__event__filter_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/cache__entry__event__filter_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/cache__entry__event__listener_8h.html b/releases/2.9.1/cppdoc/cache__entry__event__listener_8h.html
index 0faf3d4..c34c364 100644
--- a/releases/2.9.1/cppdoc/cache__entry__event__listener_8h.html
+++ b/releases/2.9.1/cppdoc/cache__entry__event__listener_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/cache__entry__event__listener_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/cache__entry__event__listener_8h_source.html b/releases/2.9.1/cppdoc/cache__entry__event__listener_8h_source.html
index 3a285ea..1745bd0 100644
--- a/releases/2.9.1/cppdoc/cache__entry__event__listener_8h_source.html
+++ b/releases/2.9.1/cppdoc/cache__entry__event__listener_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/cache__entry__event__listener_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/cache__entry__processor_8h.html b/releases/2.9.1/cppdoc/cache__entry__processor_8h.html
index 0b23750..a95a34b 100644
--- a/releases/2.9.1/cppdoc/cache__entry__processor_8h.html
+++ b/releases/2.9.1/cppdoc/cache__entry__processor_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/cache__entry__processor_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/cache__entry__processor_8h_source.html b/releases/2.9.1/cppdoc/cache__entry__processor_8h_source.html
index 089cbc2..4ff4125 100644
--- a/releases/2.9.1/cppdoc/cache__entry__processor_8h_source.html
+++ b/releases/2.9.1/cppdoc/cache__entry__processor_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/cache__entry__processor_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classes.html b/releases/2.9.1/cppdoc/classes.html
index e059b8d..e9c6855 100644
--- a/releases/2.9.1/cppdoc/classes.html
+++ b/releases/2.9.1/cppdoc/classes.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classes.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1ConstReference-members.html b/releases/2.9.1/cppdoc/classignite_1_1ConstReference-members.html
index edc7eda..246c01e 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1ConstReference-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1ConstReference-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1ConstReference-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1ConstReference.html b/releases/2.9.1/cppdoc/classignite_1_1ConstReference.html
index b215c75..a94bd9b 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1ConstReference.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1ConstReference.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1ConstReference.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1Date-members.html b/releases/2.9.1/cppdoc/classignite_1_1Date-members.html
index 69db210..cf9b205 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1Date-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1Date-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1Date-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1Date.html b/releases/2.9.1/cppdoc/classignite_1_1Date.html
index 33a3861..f89b30a 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1Date.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1Date.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1Date.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1Future-members.html b/releases/2.9.1/cppdoc/classignite_1_1Future-members.html
index d851928..63fe8d2 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1Future-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1Future-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1Future-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1Future.html b/releases/2.9.1/cppdoc/classignite_1_1Future.html
index fbc1052..ed75cf4 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1Future.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1Future.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1Future.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1Future_3_01void_01_4-members.html b/releases/2.9.1/cppdoc/classignite_1_1Future_3_01void_01_4-members.html
index 4ad75bd..95fd9bf 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1Future_3_01void_01_4-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1Future_3_01void_01_4-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1Future_3_01void_01_4-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1Future_3_01void_01_4.html b/releases/2.9.1/cppdoc/classignite_1_1Future_3_01void_01_4.html
index 6d787c6..07abfa2 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1Future_3_01void_01_4.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1Future_3_01void_01_4.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1Future_3_01void_01_4.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1Guid-members.html b/releases/2.9.1/cppdoc/classignite_1_1Guid-members.html
index f0e1978..41cc814 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1Guid-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1Guid-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1Guid-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1Guid.html b/releases/2.9.1/cppdoc/classignite_1_1Guid.html
index c07c87f..f73d387 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1Guid.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1Guid.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1Guid.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1Ignite-members.html b/releases/2.9.1/cppdoc/classignite_1_1Ignite-members.html
index eee2536..4c0165b 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1Ignite-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1Ignite-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1Ignite-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1Ignite.html b/releases/2.9.1/cppdoc/classignite_1_1Ignite.html
index 2d8e20d..3014bc5 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1Ignite.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1Ignite.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1Ignite.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1IgniteBinding-members.html b/releases/2.9.1/cppdoc/classignite_1_1IgniteBinding-members.html
index cc2d2e8..fad9d2a 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1IgniteBinding-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1IgniteBinding-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1IgniteBinding-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1IgniteBinding.html b/releases/2.9.1/cppdoc/classignite_1_1IgniteBinding.html
index 323cd6e..1685958 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1IgniteBinding.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1IgniteBinding.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1IgniteBinding.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1IgniteBindingContext-members.html b/releases/2.9.1/cppdoc/classignite_1_1IgniteBindingContext-members.html
index fa6e340..2a6a9ed 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1IgniteBindingContext-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1IgniteBindingContext-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1IgniteBindingContext-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1IgniteBindingContext.html b/releases/2.9.1/cppdoc/classignite_1_1IgniteBindingContext.html
index 8ce318b..d7e7baa 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1IgniteBindingContext.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1IgniteBindingContext.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1IgniteBindingContext.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1IgniteError-members.html b/releases/2.9.1/cppdoc/classignite_1_1IgniteError-members.html
index f411560..a849e48 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1IgniteError-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1IgniteError-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1IgniteError-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1IgniteError.html b/releases/2.9.1/cppdoc/classignite_1_1IgniteError.html
index 1fcf084..3c5101f 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1IgniteError.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1IgniteError.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1IgniteError.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1Ignition-members.html b/releases/2.9.1/cppdoc/classignite_1_1Ignition-members.html
index bcf2f02..977083f 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1Ignition-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1Ignition-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1Ignition-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1Ignition.html b/releases/2.9.1/cppdoc/classignite_1_1Ignition.html
index 8e5dfe5..418d5f1 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1Ignition.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1Ignition.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1Ignition.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1JvmOptions-members.html b/releases/2.9.1/cppdoc/classignite_1_1JvmOptions-members.html
index ad425e4..5e446e2 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1JvmOptions-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1JvmOptions-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1JvmOptions-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1JvmOptions.html b/releases/2.9.1/cppdoc/classignite_1_1JvmOptions.html
index 132c5a6..f367c55 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1JvmOptions.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1JvmOptions.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1JvmOptions.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1Reference-members.html b/releases/2.9.1/cppdoc/classignite_1_1Reference-members.html
index bf96773..f6d20b7 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1Reference-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1Reference-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1Reference-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1Reference.html b/releases/2.9.1/cppdoc/classignite_1_1Reference.html
index d8caa54..37d25c8 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1Reference.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1Reference.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1Reference.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1Time-members.html b/releases/2.9.1/cppdoc/classignite_1_1Time-members.html
index bdc882f..ed4dff2 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1Time-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1Time-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1Time-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1Time.html b/releases/2.9.1/cppdoc/classignite_1_1Time.html
index 3dae88f..0627913 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1Time.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1Time.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1Time.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1Timestamp-members.html b/releases/2.9.1/cppdoc/classignite_1_1Timestamp-members.html
index fd4569c..571f7cd 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1Timestamp-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1Timestamp-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1Timestamp-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1Timestamp.html b/releases/2.9.1/cppdoc/classignite_1_1Timestamp.html
index 356276f..ba9852c 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1Timestamp.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1Timestamp.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1Timestamp.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryArrayReader-members.html b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryArrayReader-members.html
index 8e7eae0..987abde 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryArrayReader-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryArrayReader-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1binary_1_1BinaryArrayReader-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryArrayReader.html b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryArrayReader.html
index 2e1ce46..b88f73e 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryArrayReader.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryArrayReader.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1binary_1_1BinaryArrayReader.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryArrayWriter-members.html b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryArrayWriter-members.html
index 9c5b685..a7499cf 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryArrayWriter-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryArrayWriter-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1binary_1_1BinaryArrayWriter-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryArrayWriter.html b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryArrayWriter.html
index c7c5e62..2e314c2 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryArrayWriter.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryArrayWriter.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1binary_1_1BinaryArrayWriter.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryCollectionReader-members.html b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryCollectionReader-members.html
index cca56e8..7bfc110 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryCollectionReader-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryCollectionReader-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1binary_1_1BinaryCollectionReader-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryCollectionReader.html b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryCollectionReader.html
index df732e6..d30b030 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryCollectionReader.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryCollectionReader.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1binary_1_1BinaryCollectionReader.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryCollectionWriter-members.html b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryCollectionWriter-members.html
index 78d9eff..5feb516 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryCollectionWriter-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryCollectionWriter-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1binary_1_1BinaryCollectionWriter-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryCollectionWriter.html b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryCollectionWriter.html
index 79e51c2..ac0dcd3 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryCollectionWriter.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryCollectionWriter.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1binary_1_1BinaryCollectionWriter.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryEnumEntry-members.html b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryEnumEntry-members.html
index 9793a5e..2e00ed3 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryEnumEntry-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryEnumEntry-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1binary_1_1BinaryEnumEntry-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryEnumEntry.html b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryEnumEntry.html
index 9e36313..2468ec2 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryEnumEntry.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryEnumEntry.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1binary_1_1BinaryEnumEntry.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryMapReader-members.html b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryMapReader-members.html
index 48a4b70..b28df6a 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryMapReader-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryMapReader-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1binary_1_1BinaryMapReader-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryMapReader.html b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryMapReader.html
index 99863fc..80073a7 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryMapReader.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryMapReader.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1binary_1_1BinaryMapReader.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryMapWriter-members.html b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryMapWriter-members.html
index a5593c9..fb3632e 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryMapWriter-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryMapWriter-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1binary_1_1BinaryMapWriter-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryMapWriter.html b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryMapWriter.html
index 78fa4b8..0728c16 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryMapWriter.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryMapWriter.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1binary_1_1BinaryMapWriter.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryObject-members.html b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryObject-members.html
index 122ffe6..d492d39 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryObject-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryObject-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1binary_1_1BinaryObject-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryObject.html b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryObject.html
index d7ea3b6..de4b78c 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryObject.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryObject.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1binary_1_1BinaryObject.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryRawReader-members.html b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryRawReader-members.html
index 7d8f7ca..2a7d86a 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryRawReader-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryRawReader-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1binary_1_1BinaryRawReader-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryRawReader.html b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryRawReader.html
index 1412395..3c96fb4 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryRawReader.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryRawReader.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1binary_1_1BinaryRawReader.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryRawWriter-members.html b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryRawWriter-members.html
index d2f35c6..25c11ed 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryRawWriter-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryRawWriter-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1binary_1_1BinaryRawWriter-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryRawWriter.html b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryRawWriter.html
index de71a0f..4206e31 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryRawWriter.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryRawWriter.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1binary_1_1BinaryRawWriter.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryReader-members.html b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryReader-members.html
index bc9ac0e..3732e79 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryReader-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryReader-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1binary_1_1BinaryReader-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryReader.html b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryReader.html
index d5798f1..346c1ad 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryReader.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryReader.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1binary_1_1BinaryReader.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryStringArrayReader-members.html b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryStringArrayReader-members.html
index af6f73d..a7ba7e5 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryStringArrayReader-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryStringArrayReader-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1binary_1_1BinaryStringArrayReader-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryStringArrayReader.html b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryStringArrayReader.html
index 74ccf8a..8587a93 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryStringArrayReader.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryStringArrayReader.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1binary_1_1BinaryStringArrayReader.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryStringArrayWriter-members.html b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryStringArrayWriter-members.html
index a72b521..9fe6884 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryStringArrayWriter-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryStringArrayWriter-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1binary_1_1BinaryStringArrayWriter-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryStringArrayWriter.html b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryStringArrayWriter.html
index 9c641f6..fd9fe39 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryStringArrayWriter.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryStringArrayWriter.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1binary_1_1BinaryStringArrayWriter.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryWriter-members.html b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryWriter-members.html
index dd861cf..2f0d03d 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryWriter-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryWriter-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1binary_1_1BinaryWriter-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryWriter.html b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryWriter.html
index afbf785..a703ff3 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryWriter.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1binary_1_1BinaryWriter.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1binary_1_1BinaryWriter.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1Cache-members.html b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1Cache-members.html
index 52dca94..3ecf8ab 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1Cache-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1Cache-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1cache_1_1Cache-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1Cache.html b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1Cache.html
index 3c4f8f4..4fe4024 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1Cache.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1Cache.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1cache_1_1Cache.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1CacheEntry-members.html b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1CacheEntry-members.html
index 49941d5..b02f576 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1CacheEntry-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1CacheEntry-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1cache_1_1CacheEntry-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1CacheEntry.html b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1CacheEntry.html
index 31f6275..667eb87 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1CacheEntry.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1CacheEntry.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1cache_1_1CacheEntry.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1CacheEntryEvent-members.html b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1CacheEntryEvent-members.html
index 4e21818..85ab226 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1CacheEntryEvent-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1CacheEntryEvent-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1cache_1_1CacheEntryEvent-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1CacheEntryEvent.html b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1CacheEntryEvent.html
index be0644f..df747a2 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1CacheEntryEvent.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1CacheEntryEvent.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1cache_1_1CacheEntryEvent.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1CacheEntryProcessor-members.html b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1CacheEntryProcessor-members.html
index bc44483..8084cd1 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1CacheEntryProcessor-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1CacheEntryProcessor-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1cache_1_1CacheEntryProcessor-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1CacheEntryProcessor.html b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1CacheEntryProcessor.html
index 0025115..3348e34 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1CacheEntryProcessor.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1CacheEntryProcessor.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1cache_1_1CacheEntryProcessor.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1MutableCacheEntry-members.html b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1MutableCacheEntry-members.html
index 79eade6..accbf1a 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1MutableCacheEntry-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1MutableCacheEntry-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1cache_1_1MutableCacheEntry-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1MutableCacheEntry.html b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1MutableCacheEntry.html
index acb21ab..36416b1 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1MutableCacheEntry.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1MutableCacheEntry.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1cache_1_1MutableCacheEntry.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1event_1_1CacheEntryEventFilter-members.html b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1event_1_1CacheEntryEventFilter-members.html
index c514f67..26bc920 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1event_1_1CacheEntryEventFilter-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1event_1_1CacheEntryEventFilter-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1cache_1_1event_1_1CacheEntryEventFilter-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1event_1_1CacheEntryEventFilter.html b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1event_1_1CacheEntryEventFilter.html
index a44c9eb..ddb305c 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1event_1_1CacheEntryEventFilter.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1event_1_1CacheEntryEventFilter.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1cache_1_1event_1_1CacheEntryEventFilter.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1event_1_1CacheEntryEventListener-members.html b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1event_1_1CacheEntryEventListener-members.html
index e589d12..31cda13 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1event_1_1CacheEntryEventListener-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1event_1_1CacheEntryEventListener-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1cache_1_1event_1_1CacheEntryEventListener-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1event_1_1CacheEntryEventListener.html b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1event_1_1CacheEntryEventListener.html
index 217b209..fc266cd 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1event_1_1CacheEntryEventListener.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1event_1_1CacheEntryEventListener.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1cache_1_1event_1_1CacheEntryEventListener.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1QueryCursor-members.html b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1QueryCursor-members.html
index b275340..3434c16 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1QueryCursor-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1QueryCursor-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1cache_1_1query_1_1QueryCursor-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1QueryCursor.html b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1QueryCursor.html
index d3ba72a..a8cff1b 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1QueryCursor.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1QueryCursor.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1cache_1_1query_1_1QueryCursor.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1QueryFieldsCursor-members.html b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1QueryFieldsCursor-members.html
index e2f25b7..15b8fac 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1QueryFieldsCursor-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1QueryFieldsCursor-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1cache_1_1query_1_1QueryFieldsCursor-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1QueryFieldsCursor.html b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1QueryFieldsCursor.html
index e6967db..9de6a80 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1QueryFieldsCursor.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1QueryFieldsCursor.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1cache_1_1query_1_1QueryFieldsCursor.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1QueryFieldsRow-members.html b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1QueryFieldsRow-members.html
index 8dea95d..943edf7 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1QueryFieldsRow-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1QueryFieldsRow-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1cache_1_1query_1_1QueryFieldsRow-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1QueryFieldsRow.html b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1QueryFieldsRow.html
index 87c257c..59bb850 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1QueryFieldsRow.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1QueryFieldsRow.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1cache_1_1query_1_1QueryFieldsRow.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1ScanQuery-members.html b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1ScanQuery-members.html
index 55fc828..cfbae19 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1ScanQuery-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1ScanQuery-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1cache_1_1query_1_1ScanQuery-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1ScanQuery.html b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1ScanQuery.html
index 1784d50..66988fb 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1ScanQuery.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1ScanQuery.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1cache_1_1query_1_1ScanQuery.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1SqlFieldsQuery-members.html b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1SqlFieldsQuery-members.html
index deb6d2b..2226428 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1SqlFieldsQuery-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1SqlFieldsQuery-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1cache_1_1query_1_1SqlFieldsQuery-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1SqlFieldsQuery.html b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1SqlFieldsQuery.html
index e2b4953..c9db675 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1SqlFieldsQuery.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1SqlFieldsQuery.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1cache_1_1query_1_1SqlFieldsQuery.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1SqlQuery-members.html b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1SqlQuery-members.html
index f78330e..86b543d 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1SqlQuery-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1SqlQuery-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1cache_1_1query_1_1SqlQuery-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1SqlQuery.html b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1SqlQuery.html
index b910fb5..02cd8f0 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1SqlQuery.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1SqlQuery.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1cache_1_1query_1_1SqlQuery.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1TextQuery-members.html b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1TextQuery-members.html
index f26ffea..3e03f77 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1TextQuery-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1TextQuery-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1cache_1_1query_1_1TextQuery-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1TextQuery.html b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1TextQuery.html
index 4ff00f2..612d525 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1TextQuery.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1TextQuery.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1cache_1_1query_1_1TextQuery.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1continuous_1_1ContinuousQuery-members.html b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1continuous_1_1ContinuousQuery-members.html
index 3d30f0f..610cbea 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1continuous_1_1ContinuousQuery-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1continuous_1_1ContinuousQuery-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1cache_1_1query_1_1continuous_1_1ContinuousQuery-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1continuous_1_1ContinuousQuery.html b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1continuous_1_1ContinuousQuery.html
index 6f968d3..2837c62 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1continuous_1_1ContinuousQuery.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1continuous_1_1ContinuousQuery.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1cache_1_1query_1_1continuous_1_1ContinuousQuery.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1continuous_1_1ContinuousQueryHandle-members.html b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1continuous_1_1ContinuousQueryHandle-members.html
index 89f45a3..c8f0a4d 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1continuous_1_1ContinuousQueryHandle-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1continuous_1_1ContinuousQueryHandle-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1cache_1_1query_1_1continuous_1_1ContinuousQueryHandle-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1continuous_1_1ContinuousQueryHandle.html b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1continuous_1_1ContinuousQueryHandle.html
index 141b39c..8f10cfe 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1continuous_1_1ContinuousQueryHandle.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1cache_1_1query_1_1continuous_1_1ContinuousQueryHandle.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1cache_1_1query_1_1continuous_1_1ContinuousQueryHandle.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1common_1_1Promise.html b/releases/2.9.1/cppdoc/classignite_1_1common_1_1Promise.html
index 5e1ca95..c9f0275 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1common_1_1Promise.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1common_1_1Promise.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1common_1_1Promise.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1compute_1_1Compute-members.html b/releases/2.9.1/cppdoc/classignite_1_1compute_1_1Compute-members.html
index 049c53b..b601962 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1compute_1_1Compute-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1compute_1_1Compute-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1compute_1_1Compute-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1compute_1_1Compute.html b/releases/2.9.1/cppdoc/classignite_1_1compute_1_1Compute.html
index 8e395a5..f8ba008 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1compute_1_1Compute.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1compute_1_1Compute.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1compute_1_1Compute.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1compute_1_1ComputeFunc-members.html b/releases/2.9.1/cppdoc/classignite_1_1compute_1_1ComputeFunc-members.html
index b209d56..566bfaa 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1compute_1_1ComputeFunc-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1compute_1_1ComputeFunc-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1compute_1_1ComputeFunc-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1compute_1_1ComputeFunc.html b/releases/2.9.1/cppdoc/classignite_1_1compute_1_1ComputeFunc.html
index fcea02f..1db942f 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1compute_1_1ComputeFunc.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1compute_1_1ComputeFunc.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1compute_1_1ComputeFunc.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1impl_1_1cache_1_1event_1_1CacheEntryEventFilterHolder.html b/releases/2.9.1/cppdoc/classignite_1_1impl_1_1cache_1_1event_1_1CacheEntryEventFilterHolder.html
index f267a50..36383a4 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1impl_1_1cache_1_1event_1_1CacheEntryEventFilterHolder.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1impl_1_1cache_1_1event_1_1CacheEntryEventFilterHolder.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1impl_1_1cache_1_1event_1_1CacheEntryEventFilterHolder.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1thin_1_1IgniteClient-members.html b/releases/2.9.1/cppdoc/classignite_1_1thin_1_1IgniteClient-members.html
index 2a5e9fd..2ad11b6 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1thin_1_1IgniteClient-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1thin_1_1IgniteClient-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1thin_1_1IgniteClient-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1thin_1_1IgniteClient.html b/releases/2.9.1/cppdoc/classignite_1_1thin_1_1IgniteClient.html
index 2dd7530..7c82069 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1thin_1_1IgniteClient.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1thin_1_1IgniteClient.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1thin_1_1IgniteClient.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1thin_1_1IgniteClientConfiguration-members.html b/releases/2.9.1/cppdoc/classignite_1_1thin_1_1IgniteClientConfiguration-members.html
index 117607e..3b420d4 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1thin_1_1IgniteClientConfiguration-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1thin_1_1IgniteClientConfiguration-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1thin_1_1IgniteClientConfiguration-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1thin_1_1IgniteClientConfiguration.html b/releases/2.9.1/cppdoc/classignite_1_1thin_1_1IgniteClientConfiguration.html
index 5bfe11c..3e571b5 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1thin_1_1IgniteClientConfiguration.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1thin_1_1IgniteClientConfiguration.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1thin_1_1IgniteClientConfiguration.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1thin_1_1cache_1_1CacheClient-members.html b/releases/2.9.1/cppdoc/classignite_1_1thin_1_1cache_1_1CacheClient-members.html
index ba1ec91..ad90682 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1thin_1_1cache_1_1CacheClient-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1thin_1_1cache_1_1CacheClient-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1thin_1_1cache_1_1CacheClient-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1thin_1_1cache_1_1CacheClient.html b/releases/2.9.1/cppdoc/classignite_1_1thin_1_1cache_1_1CacheClient.html
index 7e324ba..0815af5 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1thin_1_1cache_1_1CacheClient.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1thin_1_1cache_1_1CacheClient.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1thin_1_1cache_1_1CacheClient.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1transactions_1_1Transaction-members.html b/releases/2.9.1/cppdoc/classignite_1_1transactions_1_1Transaction-members.html
index d7e0fa6..77a49e6 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1transactions_1_1Transaction-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1transactions_1_1Transaction-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1transactions_1_1Transaction-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1transactions_1_1Transaction.html b/releases/2.9.1/cppdoc/classignite_1_1transactions_1_1Transaction.html
index da25065..0c8b621 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1transactions_1_1Transaction.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1transactions_1_1Transaction.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1transactions_1_1Transaction.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1transactions_1_1TransactionMetrics-members.html b/releases/2.9.1/cppdoc/classignite_1_1transactions_1_1TransactionMetrics-members.html
index a6a7673..d346011 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1transactions_1_1TransactionMetrics-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1transactions_1_1TransactionMetrics-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1transactions_1_1TransactionMetrics-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1transactions_1_1TransactionMetrics.html b/releases/2.9.1/cppdoc/classignite_1_1transactions_1_1TransactionMetrics.html
index 1432412..96d9980 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1transactions_1_1TransactionMetrics.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1transactions_1_1TransactionMetrics.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1transactions_1_1TransactionMetrics.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1transactions_1_1Transactions-members.html b/releases/2.9.1/cppdoc/classignite_1_1transactions_1_1Transactions-members.html
index eeaadaa..120af14 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1transactions_1_1Transactions-members.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1transactions_1_1Transactions-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1transactions_1_1Transactions-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/classignite_1_1transactions_1_1Transactions.html b/releases/2.9.1/cppdoc/classignite_1_1transactions_1_1Transactions.html
index ebd87ba..4fc5788 100644
--- a/releases/2.9.1/cppdoc/classignite_1_1transactions_1_1Transactions.html
+++ b/releases/2.9.1/cppdoc/classignite_1_1transactions_1_1Transactions.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/classignite_1_1transactions_1_1Transactions.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/compute_8h.html b/releases/2.9.1/cppdoc/compute_8h.html
index 2f8ccff..ec214d2 100644
--- a/releases/2.9.1/cppdoc/compute_8h.html
+++ b/releases/2.9.1/cppdoc/compute_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/compute_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/compute_8h_source.html b/releases/2.9.1/cppdoc/compute_8h_source.html
index d74ec00..d5655ca 100644
--- a/releases/2.9.1/cppdoc/compute_8h_source.html
+++ b/releases/2.9.1/cppdoc/compute_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/compute_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/compute__func_8h.html b/releases/2.9.1/cppdoc/compute__func_8h.html
index 7ef4b5e..4beade6 100644
--- a/releases/2.9.1/cppdoc/compute__func_8h.html
+++ b/releases/2.9.1/cppdoc/compute__func_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/compute__func_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/compute__func_8h_source.html b/releases/2.9.1/cppdoc/compute__func_8h_source.html
index 0193b69..0076337 100644
--- a/releases/2.9.1/cppdoc/compute__func_8h_source.html
+++ b/releases/2.9.1/cppdoc/compute__func_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/compute__func_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/continuous__query_8h.html b/releases/2.9.1/cppdoc/continuous__query_8h.html
index ab7b6dc..8682609 100644
--- a/releases/2.9.1/cppdoc/continuous__query_8h.html
+++ b/releases/2.9.1/cppdoc/continuous__query_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/continuous__query_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/continuous__query_8h_source.html b/releases/2.9.1/cppdoc/continuous__query_8h_source.html
index e64b0d0..3314e37 100644
--- a/releases/2.9.1/cppdoc/continuous__query_8h_source.html
+++ b/releases/2.9.1/cppdoc/continuous__query_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/continuous__query_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/continuous__query__handle_8h.html b/releases/2.9.1/cppdoc/continuous__query__handle_8h.html
index ab3bcaf..e526e74 100644
--- a/releases/2.9.1/cppdoc/continuous__query__handle_8h.html
+++ b/releases/2.9.1/cppdoc/continuous__query__handle_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/continuous__query__handle_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/continuous__query__handle_8h_source.html b/releases/2.9.1/cppdoc/continuous__query__handle_8h_source.html
index 9af1a28..e6d2ecd 100644
--- a/releases/2.9.1/cppdoc/continuous__query__handle_8h_source.html
+++ b/releases/2.9.1/cppdoc/continuous__query__handle_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/continuous__query__handle_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/core_2include_2ignite_2cache_2cache__peek__mode_8h.html b/releases/2.9.1/cppdoc/core_2include_2ignite_2cache_2cache__peek__mode_8h.html
index d844777..bf02511 100644
--- a/releases/2.9.1/cppdoc/core_2include_2ignite_2cache_2cache__peek__mode_8h.html
+++ b/releases/2.9.1/cppdoc/core_2include_2ignite_2cache_2cache__peek__mode_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/core_2include_2ignite_2cache_2cache__peek__mode_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/core_2include_2ignite_2cache_2cache__peek__mode_8h_source.html b/releases/2.9.1/cppdoc/core_2include_2ignite_2cache_2cache__peek__mode_8h_source.html
index be1d844..45ef451 100644
--- a/releases/2.9.1/cppdoc/core_2include_2ignite_2cache_2cache__peek__mode_8h_source.html
+++ b/releases/2.9.1/cppdoc/core_2include_2ignite_2cache_2cache__peek__mode_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/core_2include_2ignite_2cache_2cache__peek__mode_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/date_8h.html b/releases/2.9.1/cppdoc/date_8h.html
index 8124b74..ec2e3e0 100644
--- a/releases/2.9.1/cppdoc/date_8h.html
+++ b/releases/2.9.1/cppdoc/date_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/date_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/date_8h_source.html b/releases/2.9.1/cppdoc/date_8h_source.html
index 94d9b4a..508de46 100644
--- a/releases/2.9.1/cppdoc/date_8h_source.html
+++ b/releases/2.9.1/cppdoc/date_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/date_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/deprecated.html b/releases/2.9.1/cppdoc/deprecated.html
index aefb1ef..a2f7ad3 100644
--- a/releases/2.9.1/cppdoc/deprecated.html
+++ b/releases/2.9.1/cppdoc/deprecated.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/deprecated.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/dir_097f68cb7241bfc683e7bdc6c58a7783.html b/releases/2.9.1/cppdoc/dir_097f68cb7241bfc683e7bdc6c58a7783.html
index 2543d3d..95b3f4e 100644
--- a/releases/2.9.1/cppdoc/dir_097f68cb7241bfc683e7bdc6c58a7783.html
+++ b/releases/2.9.1/cppdoc/dir_097f68cb7241bfc683e7bdc6c58a7783.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/dir_097f68cb7241bfc683e7bdc6c58a7783.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/dir_11fbc4217d50ab21044e5ad6614aede5.html b/releases/2.9.1/cppdoc/dir_11fbc4217d50ab21044e5ad6614aede5.html
index fe2ff9f..ef7e96d 100644
--- a/releases/2.9.1/cppdoc/dir_11fbc4217d50ab21044e5ad6614aede5.html
+++ b/releases/2.9.1/cppdoc/dir_11fbc4217d50ab21044e5ad6614aede5.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/dir_11fbc4217d50ab21044e5ad6614aede5.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/dir_13c1d00a1be9b016a133dec12b890b36.html b/releases/2.9.1/cppdoc/dir_13c1d00a1be9b016a133dec12b890b36.html
index 018e0c3..4d4e3f5 100644
--- a/releases/2.9.1/cppdoc/dir_13c1d00a1be9b016a133dec12b890b36.html
+++ b/releases/2.9.1/cppdoc/dir_13c1d00a1be9b016a133dec12b890b36.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/dir_13c1d00a1be9b016a133dec12b890b36.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/dir_1d5505cee217f179c88903b7091c150e.html b/releases/2.9.1/cppdoc/dir_1d5505cee217f179c88903b7091c150e.html
index 06d14aa..013eb60 100644
--- a/releases/2.9.1/cppdoc/dir_1d5505cee217f179c88903b7091c150e.html
+++ b/releases/2.9.1/cppdoc/dir_1d5505cee217f179c88903b7091c150e.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/dir_1d5505cee217f179c88903b7091c150e.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/dir_2dedece15635f75054d44afc50ccfbaf.html b/releases/2.9.1/cppdoc/dir_2dedece15635f75054d44afc50ccfbaf.html
index c2d4436..d89fc93 100644
--- a/releases/2.9.1/cppdoc/dir_2dedece15635f75054d44afc50ccfbaf.html
+++ b/releases/2.9.1/cppdoc/dir_2dedece15635f75054d44afc50ccfbaf.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/dir_2dedece15635f75054d44afc50ccfbaf.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/dir_3785354546cb37560a212b468c73f89f.html b/releases/2.9.1/cppdoc/dir_3785354546cb37560a212b468c73f89f.html
index 2506d8a..36a6a2c 100644
--- a/releases/2.9.1/cppdoc/dir_3785354546cb37560a212b468c73f89f.html
+++ b/releases/2.9.1/cppdoc/dir_3785354546cb37560a212b468c73f89f.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/dir_3785354546cb37560a212b468c73f89f.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/dir_4c59fe678b7d839a2941d6346d743aa7.html b/releases/2.9.1/cppdoc/dir_4c59fe678b7d839a2941d6346d743aa7.html
index bca886c..2e00397 100644
--- a/releases/2.9.1/cppdoc/dir_4c59fe678b7d839a2941d6346d743aa7.html
+++ b/releases/2.9.1/cppdoc/dir_4c59fe678b7d839a2941d6346d743aa7.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/dir_4c59fe678b7d839a2941d6346d743aa7.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/dir_4e4d22e38ca4e2e8207825ee2d00bc54.html b/releases/2.9.1/cppdoc/dir_4e4d22e38ca4e2e8207825ee2d00bc54.html
index 88efaf0..b2c7f98 100644
--- a/releases/2.9.1/cppdoc/dir_4e4d22e38ca4e2e8207825ee2d00bc54.html
+++ b/releases/2.9.1/cppdoc/dir_4e4d22e38ca4e2e8207825ee2d00bc54.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/dir_4e4d22e38ca4e2e8207825ee2d00bc54.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/dir_6917c354dff0dc051d18bd3bcc3faea1.html b/releases/2.9.1/cppdoc/dir_6917c354dff0dc051d18bd3bcc3faea1.html
index 4ef71da..41f4d38 100644
--- a/releases/2.9.1/cppdoc/dir_6917c354dff0dc051d18bd3bcc3faea1.html
+++ b/releases/2.9.1/cppdoc/dir_6917c354dff0dc051d18bd3bcc3faea1.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/dir_6917c354dff0dc051d18bd3bcc3faea1.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/dir_70c4f2dc9c34c91dd30b464208cd3c8c.html b/releases/2.9.1/cppdoc/dir_70c4f2dc9c34c91dd30b464208cd3c8c.html
index c0e06f8..b987c7c 100644
--- a/releases/2.9.1/cppdoc/dir_70c4f2dc9c34c91dd30b464208cd3c8c.html
+++ b/releases/2.9.1/cppdoc/dir_70c4f2dc9c34c91dd30b464208cd3c8c.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/dir_70c4f2dc9c34c91dd30b464208cd3c8c.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/dir_84516225c95b6844f8b87c0f7daf8132.html b/releases/2.9.1/cppdoc/dir_84516225c95b6844f8b87c0f7daf8132.html
index 7738af1..ac8cbd7 100644
--- a/releases/2.9.1/cppdoc/dir_84516225c95b6844f8b87c0f7daf8132.html
+++ b/releases/2.9.1/cppdoc/dir_84516225c95b6844f8b87c0f7daf8132.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/dir_84516225c95b6844f8b87c0f7daf8132.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/dir_88bd599177f4cc5007b9f053025b0bc5.html b/releases/2.9.1/cppdoc/dir_88bd599177f4cc5007b9f053025b0bc5.html
index 1524c7a..f83630b 100644
--- a/releases/2.9.1/cppdoc/dir_88bd599177f4cc5007b9f053025b0bc5.html
+++ b/releases/2.9.1/cppdoc/dir_88bd599177f4cc5007b9f053025b0bc5.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/dir_88bd599177f4cc5007b9f053025b0bc5.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/dir_89e6aceab60817aa630a6f544556b5f7.html b/releases/2.9.1/cppdoc/dir_89e6aceab60817aa630a6f544556b5f7.html
index 26c3a43..3a60bfe 100644
--- a/releases/2.9.1/cppdoc/dir_89e6aceab60817aa630a6f544556b5f7.html
+++ b/releases/2.9.1/cppdoc/dir_89e6aceab60817aa630a6f544556b5f7.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/dir_89e6aceab60817aa630a6f544556b5f7.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/dir_91ef880c2b12d355e87d8c01b90755f3.html b/releases/2.9.1/cppdoc/dir_91ef880c2b12d355e87d8c01b90755f3.html
index 67094dc..e035914 100644
--- a/releases/2.9.1/cppdoc/dir_91ef880c2b12d355e87d8c01b90755f3.html
+++ b/releases/2.9.1/cppdoc/dir_91ef880c2b12d355e87d8c01b90755f3.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/dir_91ef880c2b12d355e87d8c01b90755f3.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/dir_985e469ec48e039817ced4926e3f7372.html b/releases/2.9.1/cppdoc/dir_985e469ec48e039817ced4926e3f7372.html
index 22c29ab..024799e 100644
--- a/releases/2.9.1/cppdoc/dir_985e469ec48e039817ced4926e3f7372.html
+++ b/releases/2.9.1/cppdoc/dir_985e469ec48e039817ced4926e3f7372.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/dir_985e469ec48e039817ced4926e3f7372.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/dir_a589d7fa76191ec48a638b0021c39d11.html b/releases/2.9.1/cppdoc/dir_a589d7fa76191ec48a638b0021c39d11.html
index 35ede19..40ecd79 100644
--- a/releases/2.9.1/cppdoc/dir_a589d7fa76191ec48a638b0021c39d11.html
+++ b/releases/2.9.1/cppdoc/dir_a589d7fa76191ec48a638b0021c39d11.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/dir_a589d7fa76191ec48a638b0021c39d11.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/dir_b98deae7bc3b0ca8b45558e3cfe0065d.html b/releases/2.9.1/cppdoc/dir_b98deae7bc3b0ca8b45558e3cfe0065d.html
index 5da73a0..ad8ed3c 100644
--- a/releases/2.9.1/cppdoc/dir_b98deae7bc3b0ca8b45558e3cfe0065d.html
+++ b/releases/2.9.1/cppdoc/dir_b98deae7bc3b0ca8b45558e3cfe0065d.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/dir_b98deae7bc3b0ca8b45558e3cfe0065d.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/dir_bdd9a5d540de89e9fe90efdfc6973a4f.html b/releases/2.9.1/cppdoc/dir_bdd9a5d540de89e9fe90efdfc6973a4f.html
index 3bfcbdf..07a6f89 100644
--- a/releases/2.9.1/cppdoc/dir_bdd9a5d540de89e9fe90efdfc6973a4f.html
+++ b/releases/2.9.1/cppdoc/dir_bdd9a5d540de89e9fe90efdfc6973a4f.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/dir_bdd9a5d540de89e9fe90efdfc6973a4f.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/files.html b/releases/2.9.1/cppdoc/files.html
index 08d9ec3..3136819 100644
--- a/releases/2.9.1/cppdoc/files.html
+++ b/releases/2.9.1/cppdoc/files.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/files.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions.html b/releases/2.9.1/cppdoc/functions.html
index d910105..68bd87f 100644
--- a/releases/2.9.1/cppdoc/functions.html
+++ b/releases/2.9.1/cppdoc/functions.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_0x7e.html b/releases/2.9.1/cppdoc/functions_0x7e.html
index 8b9e070..b53acec 100644
--- a/releases/2.9.1/cppdoc/functions_0x7e.html
+++ b/releases/2.9.1/cppdoc/functions_0x7e.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_0x7e.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_b.html b/releases/2.9.1/cppdoc/functions_b.html
index 8bcbb19..08c831b 100644
--- a/releases/2.9.1/cppdoc/functions_b.html
+++ b/releases/2.9.1/cppdoc/functions_b.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_b.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_c.html b/releases/2.9.1/cppdoc/functions_c.html
index 26d1ec7..195d7f8 100644
--- a/releases/2.9.1/cppdoc/functions_c.html
+++ b/releases/2.9.1/cppdoc/functions_c.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_c.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_d.html b/releases/2.9.1/cppdoc/functions_d.html
index 835e2b0..03077e8 100644
--- a/releases/2.9.1/cppdoc/functions_d.html
+++ b/releases/2.9.1/cppdoc/functions_d.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_d.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_enum.html b/releases/2.9.1/cppdoc/functions_enum.html
index ae76670..11c6130 100644
--- a/releases/2.9.1/cppdoc/functions_enum.html
+++ b/releases/2.9.1/cppdoc/functions_enum.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_enum.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_eval.html b/releases/2.9.1/cppdoc/functions_eval.html
index b6e0b38..f3bc003 100644
--- a/releases/2.9.1/cppdoc/functions_eval.html
+++ b/releases/2.9.1/cppdoc/functions_eval.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_eval.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_f.html b/releases/2.9.1/cppdoc/functions_f.html
index d32a00e..6b4cae5 100644
--- a/releases/2.9.1/cppdoc/functions_f.html
+++ b/releases/2.9.1/cppdoc/functions_f.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_f.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_func.html b/releases/2.9.1/cppdoc/functions_func.html
index c19f216..4f89058 100644
--- a/releases/2.9.1/cppdoc/functions_func.html
+++ b/releases/2.9.1/cppdoc/functions_func.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_func.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_func_0x7e.html b/releases/2.9.1/cppdoc/functions_func_0x7e.html
index 0693158..7dbc9aa 100644
--- a/releases/2.9.1/cppdoc/functions_func_0x7e.html
+++ b/releases/2.9.1/cppdoc/functions_func_0x7e.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_func_0x7e.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_func_b.html b/releases/2.9.1/cppdoc/functions_func_b.html
index d520c88..d46fd38 100644
--- a/releases/2.9.1/cppdoc/functions_func_b.html
+++ b/releases/2.9.1/cppdoc/functions_func_b.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_func_b.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_func_c.html b/releases/2.9.1/cppdoc/functions_func_c.html
index 353a785..ebf5c2c 100644
--- a/releases/2.9.1/cppdoc/functions_func_c.html
+++ b/releases/2.9.1/cppdoc/functions_func_c.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_func_c.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_func_d.html b/releases/2.9.1/cppdoc/functions_func_d.html
index b8481c5..6d088db 100644
--- a/releases/2.9.1/cppdoc/functions_func_d.html
+++ b/releases/2.9.1/cppdoc/functions_func_d.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_func_d.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_func_f.html b/releases/2.9.1/cppdoc/functions_func_f.html
index c9268a7..a1e48b5 100644
--- a/releases/2.9.1/cppdoc/functions_func_f.html
+++ b/releases/2.9.1/cppdoc/functions_func_f.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_func_f.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_func_g.html b/releases/2.9.1/cppdoc/functions_func_g.html
index ef04245..67b1884 100644
--- a/releases/2.9.1/cppdoc/functions_func_g.html
+++ b/releases/2.9.1/cppdoc/functions_func_g.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_func_g.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_func_h.html b/releases/2.9.1/cppdoc/functions_func_h.html
index b85bd09..975af9d 100644
--- a/releases/2.9.1/cppdoc/functions_func_h.html
+++ b/releases/2.9.1/cppdoc/functions_func_h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_func_h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_func_i.html b/releases/2.9.1/cppdoc/functions_func_i.html
index 0054796..1a5a858 100644
--- a/releases/2.9.1/cppdoc/functions_func_i.html
+++ b/releases/2.9.1/cppdoc/functions_func_i.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_func_i.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_func_j.html b/releases/2.9.1/cppdoc/functions_func_j.html
index 4133831..c24371c 100644
--- a/releases/2.9.1/cppdoc/functions_func_j.html
+++ b/releases/2.9.1/cppdoc/functions_func_j.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_func_j.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_func_l.html b/releases/2.9.1/cppdoc/functions_func_l.html
index 2e133a7..7419e8d 100644
--- a/releases/2.9.1/cppdoc/functions_func_l.html
+++ b/releases/2.9.1/cppdoc/functions_func_l.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_func_l.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_func_m.html b/releases/2.9.1/cppdoc/functions_func_m.html
index 5d52d60..0d81f63 100644
--- a/releases/2.9.1/cppdoc/functions_func_m.html
+++ b/releases/2.9.1/cppdoc/functions_func_m.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_func_m.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_func_o.html b/releases/2.9.1/cppdoc/functions_func_o.html
index 5d3c88f..7a87191 100644
--- a/releases/2.9.1/cppdoc/functions_func_o.html
+++ b/releases/2.9.1/cppdoc/functions_func_o.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_func_o.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_func_p.html b/releases/2.9.1/cppdoc/functions_func_p.html
index 05996db..3461868 100644
--- a/releases/2.9.1/cppdoc/functions_func_p.html
+++ b/releases/2.9.1/cppdoc/functions_func_p.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_func_p.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_func_q.html b/releases/2.9.1/cppdoc/functions_func_q.html
index 848c0ab..f18cb4e 100644
--- a/releases/2.9.1/cppdoc/functions_func_q.html
+++ b/releases/2.9.1/cppdoc/functions_func_q.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_func_q.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_func_r.html b/releases/2.9.1/cppdoc/functions_func_r.html
index 48ab516..1027991 100644
--- a/releases/2.9.1/cppdoc/functions_func_r.html
+++ b/releases/2.9.1/cppdoc/functions_func_r.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_func_r.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_func_s.html b/releases/2.9.1/cppdoc/functions_func_s.html
index 904ab56..a88765a 100644
--- a/releases/2.9.1/cppdoc/functions_func_s.html
+++ b/releases/2.9.1/cppdoc/functions_func_s.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_func_s.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_func_t.html b/releases/2.9.1/cppdoc/functions_func_t.html
index 7350fd4..ed3d399 100644
--- a/releases/2.9.1/cppdoc/functions_func_t.html
+++ b/releases/2.9.1/cppdoc/functions_func_t.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_func_t.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_func_w.html b/releases/2.9.1/cppdoc/functions_func_w.html
index 02919e3..06ecdfb 100644
--- a/releases/2.9.1/cppdoc/functions_func_w.html
+++ b/releases/2.9.1/cppdoc/functions_func_w.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_func_w.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_g.html b/releases/2.9.1/cppdoc/functions_g.html
index c4f1fee..6fd8169 100644
--- a/releases/2.9.1/cppdoc/functions_g.html
+++ b/releases/2.9.1/cppdoc/functions_g.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_g.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_h.html b/releases/2.9.1/cppdoc/functions_h.html
index 3221784..a3e908b 100644
--- a/releases/2.9.1/cppdoc/functions_h.html
+++ b/releases/2.9.1/cppdoc/functions_h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_i.html b/releases/2.9.1/cppdoc/functions_i.html
index df07ddc..74b5f9c 100644
--- a/releases/2.9.1/cppdoc/functions_i.html
+++ b/releases/2.9.1/cppdoc/functions_i.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_i.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_j.html b/releases/2.9.1/cppdoc/functions_j.html
index e01dfd3..03c2eea 100644
--- a/releases/2.9.1/cppdoc/functions_j.html
+++ b/releases/2.9.1/cppdoc/functions_j.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_j.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_k.html b/releases/2.9.1/cppdoc/functions_k.html
index 75cf8df..b1b2c19 100644
--- a/releases/2.9.1/cppdoc/functions_k.html
+++ b/releases/2.9.1/cppdoc/functions_k.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_k.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_l.html b/releases/2.9.1/cppdoc/functions_l.html
index aee7476..43c6761 100644
--- a/releases/2.9.1/cppdoc/functions_l.html
+++ b/releases/2.9.1/cppdoc/functions_l.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_l.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_m.html b/releases/2.9.1/cppdoc/functions_m.html
index 99224c7..4cd2d33 100644
--- a/releases/2.9.1/cppdoc/functions_m.html
+++ b/releases/2.9.1/cppdoc/functions_m.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_m.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_n.html b/releases/2.9.1/cppdoc/functions_n.html
index 47c040e..fdd082b 100644
--- a/releases/2.9.1/cppdoc/functions_n.html
+++ b/releases/2.9.1/cppdoc/functions_n.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_n.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_o.html b/releases/2.9.1/cppdoc/functions_o.html
index 152bef2..30d0b7c 100644
--- a/releases/2.9.1/cppdoc/functions_o.html
+++ b/releases/2.9.1/cppdoc/functions_o.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_o.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_p.html b/releases/2.9.1/cppdoc/functions_p.html
index b6d356a..6fe6077 100644
--- a/releases/2.9.1/cppdoc/functions_p.html
+++ b/releases/2.9.1/cppdoc/functions_p.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_p.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_q.html b/releases/2.9.1/cppdoc/functions_q.html
index b7f112a..dede296 100644
--- a/releases/2.9.1/cppdoc/functions_q.html
+++ b/releases/2.9.1/cppdoc/functions_q.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_q.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_r.html b/releases/2.9.1/cppdoc/functions_r.html
index 835c07d..2b8b696 100644
--- a/releases/2.9.1/cppdoc/functions_r.html
+++ b/releases/2.9.1/cppdoc/functions_r.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_r.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_rela.html b/releases/2.9.1/cppdoc/functions_rela.html
index c66f24a..bf7d0d4 100644
--- a/releases/2.9.1/cppdoc/functions_rela.html
+++ b/releases/2.9.1/cppdoc/functions_rela.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_rela.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_s.html b/releases/2.9.1/cppdoc/functions_s.html
index 19f0809..e1ea391 100644
--- a/releases/2.9.1/cppdoc/functions_s.html
+++ b/releases/2.9.1/cppdoc/functions_s.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_s.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_t.html b/releases/2.9.1/cppdoc/functions_t.html
index a919f26..ae9fc68 100644
--- a/releases/2.9.1/cppdoc/functions_t.html
+++ b/releases/2.9.1/cppdoc/functions_t.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_t.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_type.html b/releases/2.9.1/cppdoc/functions_type.html
index 74c3b37..8221318 100644
--- a/releases/2.9.1/cppdoc/functions_type.html
+++ b/releases/2.9.1/cppdoc/functions_type.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_type.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_u.html b/releases/2.9.1/cppdoc/functions_u.html
index dca0e03..33b16e0 100644
--- a/releases/2.9.1/cppdoc/functions_u.html
+++ b/releases/2.9.1/cppdoc/functions_u.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_u.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_v.html b/releases/2.9.1/cppdoc/functions_v.html
index 0d1d3fe..83a4b28 100644
--- a/releases/2.9.1/cppdoc/functions_v.html
+++ b/releases/2.9.1/cppdoc/functions_v.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_v.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_vars.html b/releases/2.9.1/cppdoc/functions_vars.html
index 99363a9..d66808b 100644
--- a/releases/2.9.1/cppdoc/functions_vars.html
+++ b/releases/2.9.1/cppdoc/functions_vars.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_vars.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/functions_w.html b/releases/2.9.1/cppdoc/functions_w.html
index 89f0848..8d43d59 100644
--- a/releases/2.9.1/cppdoc/functions_w.html
+++ b/releases/2.9.1/cppdoc/functions_w.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/functions_w.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/future_8h.html b/releases/2.9.1/cppdoc/future_8h.html
index af64f95..31c68c9 100644
--- a/releases/2.9.1/cppdoc/future_8h.html
+++ b/releases/2.9.1/cppdoc/future_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/future_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/future_8h_source.html b/releases/2.9.1/cppdoc/future_8h_source.html
index b706895..b7b8848 100644
--- a/releases/2.9.1/cppdoc/future_8h_source.html
+++ b/releases/2.9.1/cppdoc/future_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/future_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/globals.html b/releases/2.9.1/cppdoc/globals.html
index c6e764e..7ef4051 100644
--- a/releases/2.9.1/cppdoc/globals.html
+++ b/releases/2.9.1/cppdoc/globals.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/globals.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/globals_defs.html b/releases/2.9.1/cppdoc/globals_defs.html
index 10f5ce6..c8cb505 100644
--- a/releases/2.9.1/cppdoc/globals_defs.html
+++ b/releases/2.9.1/cppdoc/globals_defs.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/globals_defs.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/guid_8h.html b/releases/2.9.1/cppdoc/guid_8h.html
index 07ef3a3..c4c2fb5 100644
--- a/releases/2.9.1/cppdoc/guid_8h.html
+++ b/releases/2.9.1/cppdoc/guid_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/guid_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/guid_8h_source.html b/releases/2.9.1/cppdoc/guid_8h_source.html
index 4a3e9ca..38ba62d 100644
--- a/releases/2.9.1/cppdoc/guid_8h_source.html
+++ b/releases/2.9.1/cppdoc/guid_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/guid_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/hierarchy.html b/releases/2.9.1/cppdoc/hierarchy.html
index 45a4e7d..f19dd36 100644
--- a/releases/2.9.1/cppdoc/hierarchy.html
+++ b/releases/2.9.1/cppdoc/hierarchy.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/hierarchy.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/ignite_8h.html b/releases/2.9.1/cppdoc/ignite_8h.html
index ee199f7..5067d24 100644
--- a/releases/2.9.1/cppdoc/ignite_8h.html
+++ b/releases/2.9.1/cppdoc/ignite_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/ignite_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/ignite_8h_source.html b/releases/2.9.1/cppdoc/ignite_8h_source.html
index 13e82d5..7fb180a 100644
--- a/releases/2.9.1/cppdoc/ignite_8h_source.html
+++ b/releases/2.9.1/cppdoc/ignite_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/ignite_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/ignite__binding_8h.html b/releases/2.9.1/cppdoc/ignite__binding_8h.html
index cb1da26..460d278 100644
--- a/releases/2.9.1/cppdoc/ignite__binding_8h.html
+++ b/releases/2.9.1/cppdoc/ignite__binding_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/ignite__binding_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/ignite__binding_8h_source.html b/releases/2.9.1/cppdoc/ignite__binding_8h_source.html
index 5b877b9..aca9fa2 100644
--- a/releases/2.9.1/cppdoc/ignite__binding_8h_source.html
+++ b/releases/2.9.1/cppdoc/ignite__binding_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/ignite__binding_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/ignite__binding__context_8h.html b/releases/2.9.1/cppdoc/ignite__binding__context_8h.html
index a37a7d3..dd88eee 100644
--- a/releases/2.9.1/cppdoc/ignite__binding__context_8h.html
+++ b/releases/2.9.1/cppdoc/ignite__binding__context_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/ignite__binding__context_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/ignite__binding__context_8h_source.html b/releases/2.9.1/cppdoc/ignite__binding__context_8h_source.html
index dfe050d..41e42ff 100644
--- a/releases/2.9.1/cppdoc/ignite__binding__context_8h_source.html
+++ b/releases/2.9.1/cppdoc/ignite__binding__context_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/ignite__binding__context_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/ignite__client_8h.html b/releases/2.9.1/cppdoc/ignite__client_8h.html
index b063005..37fdc19 100644
--- a/releases/2.9.1/cppdoc/ignite__client_8h.html
+++ b/releases/2.9.1/cppdoc/ignite__client_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/ignite__client_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/ignite__client_8h_source.html b/releases/2.9.1/cppdoc/ignite__client_8h_source.html
index fa9eb91..f1a8e2a 100644
--- a/releases/2.9.1/cppdoc/ignite__client_8h_source.html
+++ b/releases/2.9.1/cppdoc/ignite__client_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/ignite__client_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/ignite__client__configuration_8h.html b/releases/2.9.1/cppdoc/ignite__client__configuration_8h.html
index 40e4968..b82bedf 100644
--- a/releases/2.9.1/cppdoc/ignite__client__configuration_8h.html
+++ b/releases/2.9.1/cppdoc/ignite__client__configuration_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/ignite__client__configuration_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/ignite__client__configuration_8h_source.html b/releases/2.9.1/cppdoc/ignite__client__configuration_8h_source.html
index cd0c4cf..2176d45 100644
--- a/releases/2.9.1/cppdoc/ignite__client__configuration_8h_source.html
+++ b/releases/2.9.1/cppdoc/ignite__client__configuration_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/ignite__client__configuration_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/ignite__configuration_8h.html b/releases/2.9.1/cppdoc/ignite__configuration_8h.html
index 50c183f..dd8e87b 100644
--- a/releases/2.9.1/cppdoc/ignite__configuration_8h.html
+++ b/releases/2.9.1/cppdoc/ignite__configuration_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/ignite__configuration_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/ignite__configuration_8h_source.html b/releases/2.9.1/cppdoc/ignite__configuration_8h_source.html
index dcebf8e..9e4bda9 100644
--- a/releases/2.9.1/cppdoc/ignite__configuration_8h_source.html
+++ b/releases/2.9.1/cppdoc/ignite__configuration_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/ignite__configuration_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/ignite__error_8h.html b/releases/2.9.1/cppdoc/ignite__error_8h.html
index 391bc1b..52a0f8b 100644
--- a/releases/2.9.1/cppdoc/ignite__error_8h.html
+++ b/releases/2.9.1/cppdoc/ignite__error_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/ignite__error_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/ignite__error_8h_source.html b/releases/2.9.1/cppdoc/ignite__error_8h_source.html
index 4e92e38..9cc2758 100644
--- a/releases/2.9.1/cppdoc/ignite__error_8h_source.html
+++ b/releases/2.9.1/cppdoc/ignite__error_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/ignite__error_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/ignition_8h.html b/releases/2.9.1/cppdoc/ignition_8h.html
index b6edfe8..8d4d3fb 100644
--- a/releases/2.9.1/cppdoc/ignition_8h.html
+++ b/releases/2.9.1/cppdoc/ignition_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/ignition_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/ignition_8h_source.html b/releases/2.9.1/cppdoc/ignition_8h_source.html
index 7dfbd4a..18211ce 100644
--- a/releases/2.9.1/cppdoc/ignition_8h_source.html
+++ b/releases/2.9.1/cppdoc/ignition_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/ignition_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/index.html b/releases/2.9.1/cppdoc/index.html
index ece3a8b..2f1e463 100644
--- a/releases/2.9.1/cppdoc/index.html
+++ b/releases/2.9.1/cppdoc/index.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/index.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/md__opt_buildagent_work_d03a92c4201fc315_ignite_modules_platforms_cpp_thin-client_README.html b/releases/2.9.1/cppdoc/md__opt_buildagent_work_d03a92c4201fc315_ignite_modules_platforms_cpp_thin-client_README.html
index 1532972..788398b 100644
--- a/releases/2.9.1/cppdoc/md__opt_buildagent_work_d03a92c4201fc315_ignite_modules_platforms_cpp_thin-client_README.html
+++ b/releases/2.9.1/cppdoc/md__opt_buildagent_work_d03a92c4201fc315_ignite_modules_platforms_cpp_thin-client_README.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/md__opt_buildagent_work_d03a92c4201fc315_ignite_modules_platforms_cpp_thin-client_README.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/mutable__cache__entry_8h.html b/releases/2.9.1/cppdoc/mutable__cache__entry_8h.html
index 32aedb2..531f75f 100644
--- a/releases/2.9.1/cppdoc/mutable__cache__entry_8h.html
+++ b/releases/2.9.1/cppdoc/mutable__cache__entry_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/mutable__cache__entry_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/mutable__cache__entry_8h_source.html b/releases/2.9.1/cppdoc/mutable__cache__entry_8h_source.html
index 0c445d5..e8e7187 100644
--- a/releases/2.9.1/cppdoc/mutable__cache__entry_8h_source.html
+++ b/releases/2.9.1/cppdoc/mutable__cache__entry_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/mutable__cache__entry_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/namespaceignite.html b/releases/2.9.1/cppdoc/namespaceignite.html
index 1f8f6f4..e56016c 100644
--- a/releases/2.9.1/cppdoc/namespaceignite.html
+++ b/releases/2.9.1/cppdoc/namespaceignite.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/namespaceignite.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/namespaceignite_1_1binary.html b/releases/2.9.1/cppdoc/namespaceignite_1_1binary.html
index 85c8f8a..e2c18e4 100644
--- a/releases/2.9.1/cppdoc/namespaceignite_1_1binary.html
+++ b/releases/2.9.1/cppdoc/namespaceignite_1_1binary.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/namespaceignite_1_1binary.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/namespaceignite_1_1cache.html b/releases/2.9.1/cppdoc/namespaceignite_1_1cache.html
index a759c0c..95b9ac4 100644
--- a/releases/2.9.1/cppdoc/namespaceignite_1_1cache.html
+++ b/releases/2.9.1/cppdoc/namespaceignite_1_1cache.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/namespaceignite_1_1cache.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/namespaceignite_1_1cache_1_1event.html b/releases/2.9.1/cppdoc/namespaceignite_1_1cache_1_1event.html
index f85040c..d102105 100644
--- a/releases/2.9.1/cppdoc/namespaceignite_1_1cache_1_1event.html
+++ b/releases/2.9.1/cppdoc/namespaceignite_1_1cache_1_1event.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/namespaceignite_1_1cache_1_1event.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/namespaceignite_1_1cache_1_1query.html b/releases/2.9.1/cppdoc/namespaceignite_1_1cache_1_1query.html
index d47131e..7d1666a 100644
--- a/releases/2.9.1/cppdoc/namespaceignite_1_1cache_1_1query.html
+++ b/releases/2.9.1/cppdoc/namespaceignite_1_1cache_1_1query.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/namespaceignite_1_1cache_1_1query.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/namespaceignite_1_1cache_1_1query_1_1continuous.html b/releases/2.9.1/cppdoc/namespaceignite_1_1cache_1_1query_1_1continuous.html
index 6f1982f..c995979 100644
--- a/releases/2.9.1/cppdoc/namespaceignite_1_1cache_1_1query_1_1continuous.html
+++ b/releases/2.9.1/cppdoc/namespaceignite_1_1cache_1_1query_1_1continuous.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/namespaceignite_1_1cache_1_1query_1_1continuous.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/namespaceignite_1_1thin.html b/releases/2.9.1/cppdoc/namespaceignite_1_1thin.html
index 94135e7..b6e1557 100644
--- a/releases/2.9.1/cppdoc/namespaceignite_1_1thin.html
+++ b/releases/2.9.1/cppdoc/namespaceignite_1_1thin.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/namespaceignite_1_1thin.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/namespaceignite_1_1thin_1_1cache.html b/releases/2.9.1/cppdoc/namespaceignite_1_1thin_1_1cache.html
index e15f574..91564e6 100644
--- a/releases/2.9.1/cppdoc/namespaceignite_1_1thin_1_1cache.html
+++ b/releases/2.9.1/cppdoc/namespaceignite_1_1thin_1_1cache.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/namespaceignite_1_1thin_1_1cache.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/namespaceignite_1_1transactions.html b/releases/2.9.1/cppdoc/namespaceignite_1_1transactions.html
index 18ac60c..1b00ec9 100644
--- a/releases/2.9.1/cppdoc/namespaceignite_1_1transactions.html
+++ b/releases/2.9.1/cppdoc/namespaceignite_1_1transactions.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/namespaceignite_1_1transactions.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/namespacemembers.html b/releases/2.9.1/cppdoc/namespacemembers.html
index a06aef2..223921b 100644
--- a/releases/2.9.1/cppdoc/namespacemembers.html
+++ b/releases/2.9.1/cppdoc/namespacemembers.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/namespacemembers.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/namespacemembers_func.html b/releases/2.9.1/cppdoc/namespacemembers_func.html
index 79802d7..b6b9200 100644
--- a/releases/2.9.1/cppdoc/namespacemembers_func.html
+++ b/releases/2.9.1/cppdoc/namespacemembers_func.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/namespacemembers_func.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/namespacemembers_vars.html b/releases/2.9.1/cppdoc/namespacemembers_vars.html
index df579a4..8e402fc 100644
--- a/releases/2.9.1/cppdoc/namespacemembers_vars.html
+++ b/releases/2.9.1/cppdoc/namespacemembers_vars.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/namespacemembers_vars.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/namespaces.html b/releases/2.9.1/cppdoc/namespaces.html
index 5446ffe..8fef99f 100644
--- a/releases/2.9.1/cppdoc/namespaces.html
+++ b/releases/2.9.1/cppdoc/namespaces.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/namespaces.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/pages.html b/releases/2.9.1/cppdoc/pages.html
index d607996..103db7d 100644
--- a/releases/2.9.1/cppdoc/pages.html
+++ b/releases/2.9.1/cppdoc/pages.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/pages.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/query_8h.html b/releases/2.9.1/cppdoc/query_8h.html
index 8f458c2..cf41d35 100644
--- a/releases/2.9.1/cppdoc/query_8h.html
+++ b/releases/2.9.1/cppdoc/query_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/query_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/query_8h_source.html b/releases/2.9.1/cppdoc/query_8h_source.html
index 7eb8622..8d78307 100644
--- a/releases/2.9.1/cppdoc/query_8h_source.html
+++ b/releases/2.9.1/cppdoc/query_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/query_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/query__cursor_8h.html b/releases/2.9.1/cppdoc/query__cursor_8h.html
index ad04e47..bd13c94 100644
--- a/releases/2.9.1/cppdoc/query__cursor_8h.html
+++ b/releases/2.9.1/cppdoc/query__cursor_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/query__cursor_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/query__cursor_8h_source.html b/releases/2.9.1/cppdoc/query__cursor_8h_source.html
index db1d85c..7fae531 100644
--- a/releases/2.9.1/cppdoc/query__cursor_8h_source.html
+++ b/releases/2.9.1/cppdoc/query__cursor_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/query__cursor_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/query__fields__cursor_8h.html b/releases/2.9.1/cppdoc/query__fields__cursor_8h.html
index 2255741..a85c389 100644
--- a/releases/2.9.1/cppdoc/query__fields__cursor_8h.html
+++ b/releases/2.9.1/cppdoc/query__fields__cursor_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/query__fields__cursor_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/query__fields__cursor_8h_source.html b/releases/2.9.1/cppdoc/query__fields__cursor_8h_source.html
index 55376dd..b6ce34a 100644
--- a/releases/2.9.1/cppdoc/query__fields__cursor_8h_source.html
+++ b/releases/2.9.1/cppdoc/query__fields__cursor_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/query__fields__cursor_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/query__fields__row_8h.html b/releases/2.9.1/cppdoc/query__fields__row_8h.html
index 7e1e605..b0e0160 100644
--- a/releases/2.9.1/cppdoc/query__fields__row_8h.html
+++ b/releases/2.9.1/cppdoc/query__fields__row_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/query__fields__row_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/query__fields__row_8h_source.html b/releases/2.9.1/cppdoc/query__fields__row_8h_source.html
index b12c2f8..82598a3 100644
--- a/releases/2.9.1/cppdoc/query__fields__row_8h_source.html
+++ b/releases/2.9.1/cppdoc/query__fields__row_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/query__fields__row_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/query__scan_8h.html b/releases/2.9.1/cppdoc/query__scan_8h.html
index ca38ba9..646aa13 100644
--- a/releases/2.9.1/cppdoc/query__scan_8h.html
+++ b/releases/2.9.1/cppdoc/query__scan_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/query__scan_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/query__scan_8h_source.html b/releases/2.9.1/cppdoc/query__scan_8h_source.html
index fb8c480..bbf1c88 100644
--- a/releases/2.9.1/cppdoc/query__scan_8h_source.html
+++ b/releases/2.9.1/cppdoc/query__scan_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/query__scan_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/query__sql_8h.html b/releases/2.9.1/cppdoc/query__sql_8h.html
index a1a5ace..f7ce032 100644
--- a/releases/2.9.1/cppdoc/query__sql_8h.html
+++ b/releases/2.9.1/cppdoc/query__sql_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/query__sql_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/query__sql_8h_source.html b/releases/2.9.1/cppdoc/query__sql_8h_source.html
index 48ea78e..1e8e9d6 100644
--- a/releases/2.9.1/cppdoc/query__sql_8h_source.html
+++ b/releases/2.9.1/cppdoc/query__sql_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/query__sql_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/query__sql__fields_8h.html b/releases/2.9.1/cppdoc/query__sql__fields_8h.html
index f4fd607..8ec6b70 100644
--- a/releases/2.9.1/cppdoc/query__sql__fields_8h.html
+++ b/releases/2.9.1/cppdoc/query__sql__fields_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/query__sql__fields_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/query__sql__fields_8h_source.html b/releases/2.9.1/cppdoc/query__sql__fields_8h_source.html
index 998f8a4..640a436 100644
--- a/releases/2.9.1/cppdoc/query__sql__fields_8h_source.html
+++ b/releases/2.9.1/cppdoc/query__sql__fields_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/query__sql__fields_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/query__text_8h.html b/releases/2.9.1/cppdoc/query__text_8h.html
index 5734c00..5d8f668 100644
--- a/releases/2.9.1/cppdoc/query__text_8h.html
+++ b/releases/2.9.1/cppdoc/query__text_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/query__text_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/query__text_8h_source.html b/releases/2.9.1/cppdoc/query__text_8h_source.html
index 65d768b..a94322d 100644
--- a/releases/2.9.1/cppdoc/query__text_8h_source.html
+++ b/releases/2.9.1/cppdoc/query__text_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/query__text_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/reference_8h.html b/releases/2.9.1/cppdoc/reference_8h.html
index f374681..1940624 100644
--- a/releases/2.9.1/cppdoc/reference_8h.html
+++ b/releases/2.9.1/cppdoc/reference_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/reference_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/reference_8h_source.html b/releases/2.9.1/cppdoc/reference_8h_source.html
index dee1d2c..ad32e74 100644
--- a/releases/2.9.1/cppdoc/reference_8h_source.html
+++ b/releases/2.9.1/cppdoc/reference_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/reference_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/search/all_0.html b/releases/2.9.1/cppdoc/search/all_0.html
index b11f028..d228c76 100644
--- a/releases/2.9.1/cppdoc/search/all_0.html
+++ b/releases/2.9.1/cppdoc/search/all_0.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_0.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_0.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/all_1.html b/releases/2.9.1/cppdoc/search/all_1.html
index c91f93c..d419752 100644
--- a/releases/2.9.1/cppdoc/search/all_1.html
+++ b/releases/2.9.1/cppdoc/search/all_1.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_1.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_1.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/all_10.html b/releases/2.9.1/cppdoc/search/all_10.html
index c028956..688dbdb 100644
--- a/releases/2.9.1/cppdoc/search/all_10.html
+++ b/releases/2.9.1/cppdoc/search/all_10.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_10.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_10.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/all_11.html b/releases/2.9.1/cppdoc/search/all_11.html
index ec57969..5a5fa4e 100644
--- a/releases/2.9.1/cppdoc/search/all_11.html
+++ b/releases/2.9.1/cppdoc/search/all_11.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_11.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_11.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/all_12.html b/releases/2.9.1/cppdoc/search/all_12.html
index bc52ac2..3b1cd50 100644
--- a/releases/2.9.1/cppdoc/search/all_12.html
+++ b/releases/2.9.1/cppdoc/search/all_12.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_12.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_12.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/all_13.html b/releases/2.9.1/cppdoc/search/all_13.html
index aac8cec..804ea8f 100644
--- a/releases/2.9.1/cppdoc/search/all_13.html
+++ b/releases/2.9.1/cppdoc/search/all_13.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_13.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_13.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/all_14.html b/releases/2.9.1/cppdoc/search/all_14.html
index ee9d5de..8bcc974 100644
--- a/releases/2.9.1/cppdoc/search/all_14.html
+++ b/releases/2.9.1/cppdoc/search/all_14.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_14.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_14.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/all_15.html b/releases/2.9.1/cppdoc/search/all_15.html
index d2b6dfa..218d7d9 100644
--- a/releases/2.9.1/cppdoc/search/all_15.html
+++ b/releases/2.9.1/cppdoc/search/all_15.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_15.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_15.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/all_16.html b/releases/2.9.1/cppdoc/search/all_16.html
index 653f052..922a08d 100644
--- a/releases/2.9.1/cppdoc/search/all_16.html
+++ b/releases/2.9.1/cppdoc/search/all_16.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_16.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_16.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/all_2.html b/releases/2.9.1/cppdoc/search/all_2.html
index 59da394..49b819a 100644
--- a/releases/2.9.1/cppdoc/search/all_2.html
+++ b/releases/2.9.1/cppdoc/search/all_2.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_2.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_2.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/all_3.html b/releases/2.9.1/cppdoc/search/all_3.html
index dc3655f..0a10dfe 100644
--- a/releases/2.9.1/cppdoc/search/all_3.html
+++ b/releases/2.9.1/cppdoc/search/all_3.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_3.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_3.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/all_4.html b/releases/2.9.1/cppdoc/search/all_4.html
index bc032c0..6865cd7 100644
--- a/releases/2.9.1/cppdoc/search/all_4.html
+++ b/releases/2.9.1/cppdoc/search/all_4.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_4.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_4.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/all_5.html b/releases/2.9.1/cppdoc/search/all_5.html
index 96f691c..a93af7f 100644
--- a/releases/2.9.1/cppdoc/search/all_5.html
+++ b/releases/2.9.1/cppdoc/search/all_5.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_5.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_5.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/all_6.html b/releases/2.9.1/cppdoc/search/all_6.html
index d32dece..b908baa 100644
--- a/releases/2.9.1/cppdoc/search/all_6.html
+++ b/releases/2.9.1/cppdoc/search/all_6.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_6.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_6.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/all_7.html b/releases/2.9.1/cppdoc/search/all_7.html
index 2dc8cd9..121c373 100644
--- a/releases/2.9.1/cppdoc/search/all_7.html
+++ b/releases/2.9.1/cppdoc/search/all_7.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_7.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_7.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/all_8.html b/releases/2.9.1/cppdoc/search/all_8.html
index bd84f2a..77475ba 100644
--- a/releases/2.9.1/cppdoc/search/all_8.html
+++ b/releases/2.9.1/cppdoc/search/all_8.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_8.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_8.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/all_9.html b/releases/2.9.1/cppdoc/search/all_9.html
index f457d53..5bdeb3d 100644
--- a/releases/2.9.1/cppdoc/search/all_9.html
+++ b/releases/2.9.1/cppdoc/search/all_9.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_9.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_9.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/all_a.html b/releases/2.9.1/cppdoc/search/all_a.html
index 3f79d46..e4b50fa 100644
--- a/releases/2.9.1/cppdoc/search/all_a.html
+++ b/releases/2.9.1/cppdoc/search/all_a.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_a.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_a.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/all_b.html b/releases/2.9.1/cppdoc/search/all_b.html
index 04bb291..02f7692 100644
--- a/releases/2.9.1/cppdoc/search/all_b.html
+++ b/releases/2.9.1/cppdoc/search/all_b.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_b.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_b.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/all_c.html b/releases/2.9.1/cppdoc/search/all_c.html
index 00b5212..68ef6d8 100644
--- a/releases/2.9.1/cppdoc/search/all_c.html
+++ b/releases/2.9.1/cppdoc/search/all_c.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_c.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_c.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/all_d.html b/releases/2.9.1/cppdoc/search/all_d.html
index 9de696a..2445301 100644
--- a/releases/2.9.1/cppdoc/search/all_d.html
+++ b/releases/2.9.1/cppdoc/search/all_d.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_d.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_d.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/all_e.html b/releases/2.9.1/cppdoc/search/all_e.html
index 6a5b5d5..a4b1ac9 100644
--- a/releases/2.9.1/cppdoc/search/all_e.html
+++ b/releases/2.9.1/cppdoc/search/all_e.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_e.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_e.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/all_f.html b/releases/2.9.1/cppdoc/search/all_f.html
index bb762ae..7813b72 100644
--- a/releases/2.9.1/cppdoc/search/all_f.html
+++ b/releases/2.9.1/cppdoc/search/all_f.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_f.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/all_f.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/classes_0.html b/releases/2.9.1/cppdoc/search/classes_0.html
index 354bc77..d7e209e 100644
--- a/releases/2.9.1/cppdoc/search/classes_0.html
+++ b/releases/2.9.1/cppdoc/search/classes_0.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/classes_0.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/classes_0.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/classes_1.html b/releases/2.9.1/cppdoc/search/classes_1.html
index 7ecc4d2..d5e16c3 100644
--- a/releases/2.9.1/cppdoc/search/classes_1.html
+++ b/releases/2.9.1/cppdoc/search/classes_1.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/classes_1.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/classes_1.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/classes_2.html b/releases/2.9.1/cppdoc/search/classes_2.html
index 3139a9d..2bb7615 100644
--- a/releases/2.9.1/cppdoc/search/classes_2.html
+++ b/releases/2.9.1/cppdoc/search/classes_2.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/classes_2.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/classes_2.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/classes_3.html b/releases/2.9.1/cppdoc/search/classes_3.html
index 06e8a7b..58f1fbe 100644
--- a/releases/2.9.1/cppdoc/search/classes_3.html
+++ b/releases/2.9.1/cppdoc/search/classes_3.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/classes_3.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/classes_3.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/classes_4.html b/releases/2.9.1/cppdoc/search/classes_4.html
index 3ea5a86..617c77c 100644
--- a/releases/2.9.1/cppdoc/search/classes_4.html
+++ b/releases/2.9.1/cppdoc/search/classes_4.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/classes_4.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/classes_4.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/classes_5.html b/releases/2.9.1/cppdoc/search/classes_5.html
index 61248ba..a310a47 100644
--- a/releases/2.9.1/cppdoc/search/classes_5.html
+++ b/releases/2.9.1/cppdoc/search/classes_5.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/classes_5.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/classes_5.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/classes_6.html b/releases/2.9.1/cppdoc/search/classes_6.html
index 8dc8900..89202f9 100644
--- a/releases/2.9.1/cppdoc/search/classes_6.html
+++ b/releases/2.9.1/cppdoc/search/classes_6.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/classes_6.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/classes_6.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/classes_7.html b/releases/2.9.1/cppdoc/search/classes_7.html
index 4ced782..8c29e55 100644
--- a/releases/2.9.1/cppdoc/search/classes_7.html
+++ b/releases/2.9.1/cppdoc/search/classes_7.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/classes_7.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/classes_7.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/classes_8.html b/releases/2.9.1/cppdoc/search/classes_8.html
index 126b158..67af20a 100644
--- a/releases/2.9.1/cppdoc/search/classes_8.html
+++ b/releases/2.9.1/cppdoc/search/classes_8.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/classes_8.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/classes_8.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/classes_9.html b/releases/2.9.1/cppdoc/search/classes_9.html
index 0632fb4..911e739 100644
--- a/releases/2.9.1/cppdoc/search/classes_9.html
+++ b/releases/2.9.1/cppdoc/search/classes_9.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/classes_9.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/classes_9.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/classes_a.html b/releases/2.9.1/cppdoc/search/classes_a.html
index c8ec51c..5848c22 100644
--- a/releases/2.9.1/cppdoc/search/classes_a.html
+++ b/releases/2.9.1/cppdoc/search/classes_a.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/classes_a.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/classes_a.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/classes_b.html b/releases/2.9.1/cppdoc/search/classes_b.html
index 0d4ab15..edfbdea 100644
--- a/releases/2.9.1/cppdoc/search/classes_b.html
+++ b/releases/2.9.1/cppdoc/search/classes_b.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/classes_b.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/classes_b.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/classes_c.html b/releases/2.9.1/cppdoc/search/classes_c.html
index 551d5f2..6303289 100644
--- a/releases/2.9.1/cppdoc/search/classes_c.html
+++ b/releases/2.9.1/cppdoc/search/classes_c.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/classes_c.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/classes_c.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/defines_0.html b/releases/2.9.1/cppdoc/search/defines_0.html
index 2b2153d..8f7d21f 100644
--- a/releases/2.9.1/cppdoc/search/defines_0.html
+++ b/releases/2.9.1/cppdoc/search/defines_0.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/defines_0.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/defines_0.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/enums_0.html b/releases/2.9.1/cppdoc/search/enums_0.html
index 7eb5485..1768dd1 100644
--- a/releases/2.9.1/cppdoc/search/enums_0.html
+++ b/releases/2.9.1/cppdoc/search/enums_0.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/enums_0.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/enums_0.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/enumvalues_0.html b/releases/2.9.1/cppdoc/search/enumvalues_0.html
index dbbdb09..8b9e78f 100644
--- a/releases/2.9.1/cppdoc/search/enumvalues_0.html
+++ b/releases/2.9.1/cppdoc/search/enumvalues_0.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/enumvalues_0.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/enumvalues_0.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/enumvalues_1.html b/releases/2.9.1/cppdoc/search/enumvalues_1.html
index dda4873..425c550 100644
--- a/releases/2.9.1/cppdoc/search/enumvalues_1.html
+++ b/releases/2.9.1/cppdoc/search/enumvalues_1.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/enumvalues_1.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/enumvalues_1.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/enumvalues_2.html b/releases/2.9.1/cppdoc/search/enumvalues_2.html
index e26cadf..ea5b289 100644
--- a/releases/2.9.1/cppdoc/search/enumvalues_2.html
+++ b/releases/2.9.1/cppdoc/search/enumvalues_2.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/enumvalues_2.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/enumvalues_2.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/enumvalues_3.html b/releases/2.9.1/cppdoc/search/enumvalues_3.html
index 28d09f6..84926bd 100644
--- a/releases/2.9.1/cppdoc/search/enumvalues_3.html
+++ b/releases/2.9.1/cppdoc/search/enumvalues_3.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/enumvalues_3.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/enumvalues_3.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/enumvalues_4.html b/releases/2.9.1/cppdoc/search/enumvalues_4.html
index 0d01e74..5c8abb2 100644
--- a/releases/2.9.1/cppdoc/search/enumvalues_4.html
+++ b/releases/2.9.1/cppdoc/search/enumvalues_4.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/enumvalues_4.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/enumvalues_4.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/enumvalues_5.html b/releases/2.9.1/cppdoc/search/enumvalues_5.html
index 707aa11..140a9a9 100644
--- a/releases/2.9.1/cppdoc/search/enumvalues_5.html
+++ b/releases/2.9.1/cppdoc/search/enumvalues_5.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/enumvalues_5.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/enumvalues_5.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/enumvalues_6.html b/releases/2.9.1/cppdoc/search/enumvalues_6.html
index 51e90ec..9cd3f04 100644
--- a/releases/2.9.1/cppdoc/search/enumvalues_6.html
+++ b/releases/2.9.1/cppdoc/search/enumvalues_6.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/enumvalues_6.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/enumvalues_6.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/enumvalues_7.html b/releases/2.9.1/cppdoc/search/enumvalues_7.html
index 2dd51b8..ac4fbf3 100644
--- a/releases/2.9.1/cppdoc/search/enumvalues_7.html
+++ b/releases/2.9.1/cppdoc/search/enumvalues_7.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/enumvalues_7.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/enumvalues_7.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/enumvalues_8.html b/releases/2.9.1/cppdoc/search/enumvalues_8.html
index 2d02cdc..0a04365 100644
--- a/releases/2.9.1/cppdoc/search/enumvalues_8.html
+++ b/releases/2.9.1/cppdoc/search/enumvalues_8.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/enumvalues_8.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/enumvalues_8.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/enumvalues_9.html b/releases/2.9.1/cppdoc/search/enumvalues_9.html
index 99cd19e..02af795 100644
--- a/releases/2.9.1/cppdoc/search/enumvalues_9.html
+++ b/releases/2.9.1/cppdoc/search/enumvalues_9.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/enumvalues_9.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/enumvalues_9.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/enumvalues_a.html b/releases/2.9.1/cppdoc/search/enumvalues_a.html
index 44f8c06..3ded50b 100644
--- a/releases/2.9.1/cppdoc/search/enumvalues_a.html
+++ b/releases/2.9.1/cppdoc/search/enumvalues_a.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/enumvalues_a.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/enumvalues_a.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/enumvalues_b.html b/releases/2.9.1/cppdoc/search/enumvalues_b.html
index 387b56f..668b078 100644
--- a/releases/2.9.1/cppdoc/search/enumvalues_b.html
+++ b/releases/2.9.1/cppdoc/search/enumvalues_b.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/enumvalues_b.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/enumvalues_b.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/enumvalues_c.html b/releases/2.9.1/cppdoc/search/enumvalues_c.html
index 78bb1f4..f2bf5df 100644
--- a/releases/2.9.1/cppdoc/search/enumvalues_c.html
+++ b/releases/2.9.1/cppdoc/search/enumvalues_c.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/enumvalues_c.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/enumvalues_c.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/files_0.html b/releases/2.9.1/cppdoc/search/files_0.html
index 296adbd..752f90e 100644
--- a/releases/2.9.1/cppdoc/search/files_0.html
+++ b/releases/2.9.1/cppdoc/search/files_0.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/files_0.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/files_0.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/files_1.html b/releases/2.9.1/cppdoc/search/files_1.html
index 63444c0..ace514b 100644
--- a/releases/2.9.1/cppdoc/search/files_1.html
+++ b/releases/2.9.1/cppdoc/search/files_1.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/files_1.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/files_1.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/files_2.html b/releases/2.9.1/cppdoc/search/files_2.html
index 000be75..e9bea39 100644
--- a/releases/2.9.1/cppdoc/search/files_2.html
+++ b/releases/2.9.1/cppdoc/search/files_2.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/files_2.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/files_2.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/files_3.html b/releases/2.9.1/cppdoc/search/files_3.html
index a8e186a..32ad6e8 100644
--- a/releases/2.9.1/cppdoc/search/files_3.html
+++ b/releases/2.9.1/cppdoc/search/files_3.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/files_3.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/files_3.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/files_4.html b/releases/2.9.1/cppdoc/search/files_4.html
index 358a61a..89b9a0a 100644
--- a/releases/2.9.1/cppdoc/search/files_4.html
+++ b/releases/2.9.1/cppdoc/search/files_4.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/files_4.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/files_4.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/files_5.html b/releases/2.9.1/cppdoc/search/files_5.html
index 4cdfb90..c85dea7 100644
--- a/releases/2.9.1/cppdoc/search/files_5.html
+++ b/releases/2.9.1/cppdoc/search/files_5.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/files_5.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/files_5.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/files_6.html b/releases/2.9.1/cppdoc/search/files_6.html
index a4f42c5..7fc19be 100644
--- a/releases/2.9.1/cppdoc/search/files_6.html
+++ b/releases/2.9.1/cppdoc/search/files_6.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/files_6.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/files_6.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/files_7.html b/releases/2.9.1/cppdoc/search/files_7.html
index 96b1b01..1431a07 100644
--- a/releases/2.9.1/cppdoc/search/files_7.html
+++ b/releases/2.9.1/cppdoc/search/files_7.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/files_7.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/files_7.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/files_8.html b/releases/2.9.1/cppdoc/search/files_8.html
index 93ed454..2e6e05f 100644
--- a/releases/2.9.1/cppdoc/search/files_8.html
+++ b/releases/2.9.1/cppdoc/search/files_8.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/files_8.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/files_8.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/files_9.html b/releases/2.9.1/cppdoc/search/files_9.html
index d25085c..7c2cfa5 100644
--- a/releases/2.9.1/cppdoc/search/files_9.html
+++ b/releases/2.9.1/cppdoc/search/files_9.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/files_9.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/files_9.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/files_a.html b/releases/2.9.1/cppdoc/search/files_a.html
index e27cd61..23d328a 100644
--- a/releases/2.9.1/cppdoc/search/files_a.html
+++ b/releases/2.9.1/cppdoc/search/files_a.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/files_a.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/files_a.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/functions_0.html b/releases/2.9.1/cppdoc/search/functions_0.html
index 75570cc..d68b149 100644
--- a/releases/2.9.1/cppdoc/search/functions_0.html
+++ b/releases/2.9.1/cppdoc/search/functions_0.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_0.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_0.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/functions_1.html b/releases/2.9.1/cppdoc/search/functions_1.html
index 1cad9d4..1d9afe5 100644
--- a/releases/2.9.1/cppdoc/search/functions_1.html
+++ b/releases/2.9.1/cppdoc/search/functions_1.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_1.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_1.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/functions_10.html b/releases/2.9.1/cppdoc/search/functions_10.html
index b80aad9..78a338c 100644
--- a/releases/2.9.1/cppdoc/search/functions_10.html
+++ b/releases/2.9.1/cppdoc/search/functions_10.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_10.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_10.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/functions_11.html b/releases/2.9.1/cppdoc/search/functions_11.html
index 1e82425..2584f1b 100644
--- a/releases/2.9.1/cppdoc/search/functions_11.html
+++ b/releases/2.9.1/cppdoc/search/functions_11.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_11.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_11.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/functions_12.html b/releases/2.9.1/cppdoc/search/functions_12.html
index 4c317e5..18309f9 100644
--- a/releases/2.9.1/cppdoc/search/functions_12.html
+++ b/releases/2.9.1/cppdoc/search/functions_12.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_12.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_12.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/functions_2.html b/releases/2.9.1/cppdoc/search/functions_2.html
index 39636f2..a841ea4 100644
--- a/releases/2.9.1/cppdoc/search/functions_2.html
+++ b/releases/2.9.1/cppdoc/search/functions_2.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_2.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_2.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/functions_3.html b/releases/2.9.1/cppdoc/search/functions_3.html
index d30311a..8940012 100644
--- a/releases/2.9.1/cppdoc/search/functions_3.html
+++ b/releases/2.9.1/cppdoc/search/functions_3.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_3.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_3.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/functions_4.html b/releases/2.9.1/cppdoc/search/functions_4.html
index 748fc7e..90153fd 100644
--- a/releases/2.9.1/cppdoc/search/functions_4.html
+++ b/releases/2.9.1/cppdoc/search/functions_4.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_4.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_4.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/functions_5.html b/releases/2.9.1/cppdoc/search/functions_5.html
index 2abd9ed..f42dfc0 100644
--- a/releases/2.9.1/cppdoc/search/functions_5.html
+++ b/releases/2.9.1/cppdoc/search/functions_5.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_5.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_5.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/functions_6.html b/releases/2.9.1/cppdoc/search/functions_6.html
index cf2d84f..53eeb83 100644
--- a/releases/2.9.1/cppdoc/search/functions_6.html
+++ b/releases/2.9.1/cppdoc/search/functions_6.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_6.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_6.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/functions_7.html b/releases/2.9.1/cppdoc/search/functions_7.html
index d57d735..65c478d 100644
--- a/releases/2.9.1/cppdoc/search/functions_7.html
+++ b/releases/2.9.1/cppdoc/search/functions_7.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_7.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_7.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/functions_8.html b/releases/2.9.1/cppdoc/search/functions_8.html
index af66a0a..3c08910 100644
--- a/releases/2.9.1/cppdoc/search/functions_8.html
+++ b/releases/2.9.1/cppdoc/search/functions_8.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_8.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_8.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/functions_9.html b/releases/2.9.1/cppdoc/search/functions_9.html
index 3d9602e..effd997 100644
--- a/releases/2.9.1/cppdoc/search/functions_9.html
+++ b/releases/2.9.1/cppdoc/search/functions_9.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_9.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_9.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/functions_a.html b/releases/2.9.1/cppdoc/search/functions_a.html
index eddf727..b3f0c0f 100644
--- a/releases/2.9.1/cppdoc/search/functions_a.html
+++ b/releases/2.9.1/cppdoc/search/functions_a.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_a.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_a.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/functions_b.html b/releases/2.9.1/cppdoc/search/functions_b.html
index 41f37dc..eaf8084 100644
--- a/releases/2.9.1/cppdoc/search/functions_b.html
+++ b/releases/2.9.1/cppdoc/search/functions_b.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_b.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_b.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/functions_c.html b/releases/2.9.1/cppdoc/search/functions_c.html
index 9ba39e4..9d43092 100644
--- a/releases/2.9.1/cppdoc/search/functions_c.html
+++ b/releases/2.9.1/cppdoc/search/functions_c.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_c.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_c.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/functions_d.html b/releases/2.9.1/cppdoc/search/functions_d.html
index 5d5e6ff..3d0e579 100644
--- a/releases/2.9.1/cppdoc/search/functions_d.html
+++ b/releases/2.9.1/cppdoc/search/functions_d.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_d.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_d.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/functions_e.html b/releases/2.9.1/cppdoc/search/functions_e.html
index a25e129..7c2fb70 100644
--- a/releases/2.9.1/cppdoc/search/functions_e.html
+++ b/releases/2.9.1/cppdoc/search/functions_e.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_e.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_e.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/functions_f.html b/releases/2.9.1/cppdoc/search/functions_f.html
index f05cea3..b6728ae 100644
--- a/releases/2.9.1/cppdoc/search/functions_f.html
+++ b/releases/2.9.1/cppdoc/search/functions_f.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_f.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/functions_f.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/namespaces_0.html b/releases/2.9.1/cppdoc/search/namespaces_0.html
index 68b41d6..322a63f 100644
--- a/releases/2.9.1/cppdoc/search/namespaces_0.html
+++ b/releases/2.9.1/cppdoc/search/namespaces_0.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/namespaces_0.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/namespaces_0.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/nomatches.html b/releases/2.9.1/cppdoc/search/nomatches.html
index 794766d..a5c3ff7 100644
--- a/releases/2.9.1/cppdoc/search/nomatches.html
+++ b/releases/2.9.1/cppdoc/search/nomatches.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/nomatches.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/nomatches.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
 <script type="text/javascript" src="search.js"></script>
diff --git a/releases/2.9.1/cppdoc/search/pages_0.html b/releases/2.9.1/cppdoc/search/pages_0.html
index a220d25..2c1cc2a 100644
--- a/releases/2.9.1/cppdoc/search/pages_0.html
+++ b/releases/2.9.1/cppdoc/search/pages_0.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/pages_0.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/pages_0.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/pages_1.html b/releases/2.9.1/cppdoc/search/pages_1.html
index 5779bfa..fdb8a77 100644
--- a/releases/2.9.1/cppdoc/search/pages_1.html
+++ b/releases/2.9.1/cppdoc/search/pages_1.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/pages_1.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/pages_1.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/related_0.html b/releases/2.9.1/cppdoc/search/related_0.html
index 0e65c2b..5a7eda1 100644
--- a/releases/2.9.1/cppdoc/search/related_0.html
+++ b/releases/2.9.1/cppdoc/search/related_0.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/related_0.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/related_0.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/typedefs_0.html b/releases/2.9.1/cppdoc/search/typedefs_0.html
index 9340571..732e3b8 100644
--- a/releases/2.9.1/cppdoc/search/typedefs_0.html
+++ b/releases/2.9.1/cppdoc/search/typedefs_0.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/typedefs_0.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/typedefs_0.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/typedefs_1.html b/releases/2.9.1/cppdoc/search/typedefs_1.html
index 5026281..c0b81eb 100644
--- a/releases/2.9.1/cppdoc/search/typedefs_1.html
+++ b/releases/2.9.1/cppdoc/search/typedefs_1.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/typedefs_1.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/typedefs_1.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/typedefs_2.html b/releases/2.9.1/cppdoc/search/typedefs_2.html
index 856a0c6..e8dfd56 100644
--- a/releases/2.9.1/cppdoc/search/typedefs_2.html
+++ b/releases/2.9.1/cppdoc/search/typedefs_2.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/typedefs_2.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/typedefs_2.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/variables_0.html b/releases/2.9.1/cppdoc/search/variables_0.html
index 6cc6507..dcdfe3c 100644
--- a/releases/2.9.1/cppdoc/search/variables_0.html
+++ b/releases/2.9.1/cppdoc/search/variables_0.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/variables_0.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/variables_0.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/variables_1.html b/releases/2.9.1/cppdoc/search/variables_1.html
index 2a0878a..2d4fbae 100644
--- a/releases/2.9.1/cppdoc/search/variables_1.html
+++ b/releases/2.9.1/cppdoc/search/variables_1.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/variables_1.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/variables_1.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/variables_2.html b/releases/2.9.1/cppdoc/search/variables_2.html
index 469b4cc..22a3e91 100644
--- a/releases/2.9.1/cppdoc/search/variables_2.html
+++ b/releases/2.9.1/cppdoc/search/variables_2.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/variables_2.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/variables_2.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/variables_3.html b/releases/2.9.1/cppdoc/search/variables_3.html
index eaf17b5..189b92d 100644
--- a/releases/2.9.1/cppdoc/search/variables_3.html
+++ b/releases/2.9.1/cppdoc/search/variables_3.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/variables_3.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/variables_3.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/variables_4.html b/releases/2.9.1/cppdoc/search/variables_4.html
index aee098c..4a89268 100644
--- a/releases/2.9.1/cppdoc/search/variables_4.html
+++ b/releases/2.9.1/cppdoc/search/variables_4.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/variables_4.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/variables_4.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/variables_5.html b/releases/2.9.1/cppdoc/search/variables_5.html
index db610d5..3527720 100644
--- a/releases/2.9.1/cppdoc/search/variables_5.html
+++ b/releases/2.9.1/cppdoc/search/variables_5.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/variables_5.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/variables_5.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/variables_6.html b/releases/2.9.1/cppdoc/search/variables_6.html
index e64545d..24e84c3 100644
--- a/releases/2.9.1/cppdoc/search/variables_6.html
+++ b/releases/2.9.1/cppdoc/search/variables_6.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/variables_6.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/variables_6.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/search/variables_7.html b/releases/2.9.1/cppdoc/search/variables_7.html
index 15b89b8..6b04a47 100644
--- a/releases/2.9.1/cppdoc/search/variables_7.html
+++ b/releases/2.9.1/cppdoc/search/variables_7.html
@@ -1,6 +1,31 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html><head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/variables_7.html" /><title></title>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/search/variables_7.html" />
+<title></title>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
 <link rel="stylesheet" type="text/css" href="search.css"/>
diff --git a/releases/2.9.1/cppdoc/ssl__mode_8h.html b/releases/2.9.1/cppdoc/ssl__mode_8h.html
index f690bef..4390423 100644
--- a/releases/2.9.1/cppdoc/ssl__mode_8h.html
+++ b/releases/2.9.1/cppdoc/ssl__mode_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/ssl__mode_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/ssl__mode_8h_source.html b/releases/2.9.1/cppdoc/ssl__mode_8h_source.html
index 8e2c336..e996e95 100644
--- a/releases/2.9.1/cppdoc/ssl__mode_8h_source.html
+++ b/releases/2.9.1/cppdoc/ssl__mode_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/ssl__mode_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1IgniteConfiguration-members.html b/releases/2.9.1/cppdoc/structignite_1_1IgniteConfiguration-members.html
index c02a6ba..fb0a208 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1IgniteConfiguration-members.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1IgniteConfiguration-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1IgniteConfiguration-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1IgniteConfiguration.html b/releases/2.9.1/cppdoc/structignite_1_1IgniteConfiguration.html
index ae7dfc0..7d6704d 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1IgniteConfiguration.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1IgniteConfiguration.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1IgniteConfiguration.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnum.html b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnum.html
index eb3131f..e8089c2 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnum.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnum.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1binary_1_1BinaryEnum.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnumDefault-members.html b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnumDefault-members.html
index 837fc78..5235c57 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnumDefault-members.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnumDefault-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1binary_1_1BinaryEnumDefault-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnumDefault.html b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnumDefault.html
index 583bcd5..c603489 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnumDefault.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnumDefault.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1binary_1_1BinaryEnumDefault.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnumDefaultAll-members.html b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnumDefaultAll-members.html
index 797e0f9..728da91 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnumDefaultAll-members.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnumDefaultAll-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1binary_1_1BinaryEnumDefaultAll-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnumDefaultAll.html b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnumDefaultAll.html
index 9ee5a1b..d06dfd1 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnumDefaultAll.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnumDefaultAll.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1binary_1_1BinaryEnumDefaultAll.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnumIntMinNull-members.html b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnumIntMinNull-members.html
index fe21325..7193990 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnumIntMinNull-members.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnumIntMinNull-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1binary_1_1BinaryEnumIntMinNull-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnumIntMinNull.html b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnumIntMinNull.html
index 1a957ee..94a9680 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnumIntMinNull.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnumIntMinNull.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1binary_1_1BinaryEnumIntMinNull.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnum_3_01T_01_5_01_4-members.html b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnum_3_01T_01_5_01_4-members.html
index 62f94b1..4c21ee4 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnum_3_01T_01_5_01_4-members.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnum_3_01T_01_5_01_4-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1binary_1_1BinaryEnum_3_01T_01_5_01_4-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnum_3_01T_01_5_01_4.html b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnum_3_01T_01_5_01_4.html
index 85898c4..b5e30c8 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnum_3_01T_01_5_01_4.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryEnum_3_01T_01_5_01_4.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1binary_1_1BinaryEnum_3_01T_01_5_01_4.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryType.html b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryType.html
index 48e5dbf..42c34d1 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryType.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryType.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1binary_1_1BinaryType.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryTypeDefaultAll-members.html b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryTypeDefaultAll-members.html
index 1a7a055..addede3 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryTypeDefaultAll-members.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryTypeDefaultAll-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1binary_1_1BinaryTypeDefaultAll-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryTypeDefaultAll.html b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryTypeDefaultAll.html
index a80b7aa..66a7c0a 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryTypeDefaultAll.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryTypeDefaultAll.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1binary_1_1BinaryTypeDefaultAll.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryTypeDefaultHashing-members.html b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryTypeDefaultHashing-members.html
index ffc66b5..45155c5 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryTypeDefaultHashing-members.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryTypeDefaultHashing-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1binary_1_1BinaryTypeDefaultHashing-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryTypeDefaultHashing.html b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryTypeDefaultHashing.html
index 014ec9e..f07e8c5 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryTypeDefaultHashing.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryTypeDefaultHashing.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1binary_1_1BinaryTypeDefaultHashing.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryTypeNonNullableType-members.html b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryTypeNonNullableType-members.html
index 86cedc2..ac8d2fe 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryTypeNonNullableType-members.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryTypeNonNullableType-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1binary_1_1BinaryTypeNonNullableType-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryTypeNonNullableType.html b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryTypeNonNullableType.html
index 4752c4c..4fef17f 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryTypeNonNullableType.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryTypeNonNullableType.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1binary_1_1BinaryTypeNonNullableType.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryType_3_01T_01_5_4-members.html b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryType_3_01T_01_5_4-members.html
index 665e83f..efb559e 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryType_3_01T_01_5_4-members.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryType_3_01T_01_5_4-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1binary_1_1BinaryType_3_01T_01_5_4-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryType_3_01T_01_5_4.html b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryType_3_01T_01_5_4.html
index 5b77b57..963aa1e 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryType_3_01T_01_5_4.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1BinaryType_3_01T_01_5_4.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1binary_1_1BinaryType_3_01T_01_5_4.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1CollectionType-members.html b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1CollectionType-members.html
index 5197d92..00b7c87 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1CollectionType-members.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1CollectionType-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1binary_1_1CollectionType-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1CollectionType.html b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1CollectionType.html
index 26d7bf4..1c8d5b1 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1CollectionType.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1CollectionType.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1binary_1_1CollectionType.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1MapType-members.html b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1MapType-members.html
index d236db2..c73ab4c 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1MapType-members.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1MapType-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1binary_1_1MapType-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1MapType.html b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1MapType.html
index 0359770..1f84afc 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1binary_1_1MapType.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1binary_1_1MapType.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1binary_1_1MapType.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1cache_1_1CachePeekMode-members.html b/releases/2.9.1/cppdoc/structignite_1_1cache_1_1CachePeekMode-members.html
index 36724f2..9d5f9c4 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1cache_1_1CachePeekMode-members.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1cache_1_1CachePeekMode-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1cache_1_1CachePeekMode-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1cache_1_1CachePeekMode.html b/releases/2.9.1/cppdoc/structignite_1_1cache_1_1CachePeekMode.html
index 53554f2..3daa12b 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1cache_1_1CachePeekMode.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1cache_1_1CachePeekMode.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1cache_1_1CachePeekMode.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1thin_1_1SslMode-members.html b/releases/2.9.1/cppdoc/structignite_1_1thin_1_1SslMode-members.html
index d040715..4d78560 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1thin_1_1SslMode-members.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1thin_1_1SslMode-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1thin_1_1SslMode-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1thin_1_1SslMode.html b/releases/2.9.1/cppdoc/structignite_1_1thin_1_1SslMode.html
index 01ea140..f7309a0 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1thin_1_1SslMode.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1thin_1_1SslMode.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1thin_1_1SslMode.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1thin_1_1cache_1_1CachePeekMode-members.html b/releases/2.9.1/cppdoc/structignite_1_1thin_1_1cache_1_1CachePeekMode-members.html
index 5f480a6..d7cf4d2 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1thin_1_1cache_1_1CachePeekMode-members.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1thin_1_1cache_1_1CachePeekMode-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1thin_1_1cache_1_1CachePeekMode-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1thin_1_1cache_1_1CachePeekMode.html b/releases/2.9.1/cppdoc/structignite_1_1thin_1_1cache_1_1CachePeekMode.html
index bc84e99..78cd2b7 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1thin_1_1cache_1_1CachePeekMode.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1thin_1_1cache_1_1CachePeekMode.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1thin_1_1cache_1_1CachePeekMode.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1transactions_1_1TransactionConcurrency-members.html b/releases/2.9.1/cppdoc/structignite_1_1transactions_1_1TransactionConcurrency-members.html
index a80df4a..5d96c34 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1transactions_1_1TransactionConcurrency-members.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1transactions_1_1TransactionConcurrency-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1transactions_1_1TransactionConcurrency-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1transactions_1_1TransactionConcurrency.html b/releases/2.9.1/cppdoc/structignite_1_1transactions_1_1TransactionConcurrency.html
index 8789f2e..18195ef 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1transactions_1_1TransactionConcurrency.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1transactions_1_1TransactionConcurrency.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1transactions_1_1TransactionConcurrency.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1transactions_1_1TransactionIsolation-members.html b/releases/2.9.1/cppdoc/structignite_1_1transactions_1_1TransactionIsolation-members.html
index 1d2c6f6..293ac4c 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1transactions_1_1TransactionIsolation-members.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1transactions_1_1TransactionIsolation-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1transactions_1_1TransactionIsolation-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1transactions_1_1TransactionIsolation.html b/releases/2.9.1/cppdoc/structignite_1_1transactions_1_1TransactionIsolation.html
index 69b4fc0..ebd8107 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1transactions_1_1TransactionIsolation.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1transactions_1_1TransactionIsolation.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1transactions_1_1TransactionIsolation.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1transactions_1_1TransactionState-members.html b/releases/2.9.1/cppdoc/structignite_1_1transactions_1_1TransactionState-members.html
index f0f298c..4a89813 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1transactions_1_1TransactionState-members.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1transactions_1_1TransactionState-members.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1transactions_1_1TransactionState-members.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/structignite_1_1transactions_1_1TransactionState.html b/releases/2.9.1/cppdoc/structignite_1_1transactions_1_1TransactionState.html
index 40e58ec..8a218c3 100644
--- a/releases/2.9.1/cppdoc/structignite_1_1transactions_1_1TransactionState.html
+++ b/releases/2.9.1/cppdoc/structignite_1_1transactions_1_1TransactionState.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/structignite_1_1transactions_1_1TransactionState.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/thin-client_2include_2ignite_2thin_2cache_2cache__peek__mode_8h.html b/releases/2.9.1/cppdoc/thin-client_2include_2ignite_2thin_2cache_2cache__peek__mode_8h.html
index 5debb90..3f683a5 100644
--- a/releases/2.9.1/cppdoc/thin-client_2include_2ignite_2thin_2cache_2cache__peek__mode_8h.html
+++ b/releases/2.9.1/cppdoc/thin-client_2include_2ignite_2thin_2cache_2cache__peek__mode_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/thin-client_2include_2ignite_2thin_2cache_2cache__peek__mode_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/thin-client_2include_2ignite_2thin_2cache_2cache__peek__mode_8h_source.html b/releases/2.9.1/cppdoc/thin-client_2include_2ignite_2thin_2cache_2cache__peek__mode_8h_source.html
index 8c41aa2..ad96a5b 100644
--- a/releases/2.9.1/cppdoc/thin-client_2include_2ignite_2thin_2cache_2cache__peek__mode_8h_source.html
+++ b/releases/2.9.1/cppdoc/thin-client_2include_2ignite_2thin_2cache_2cache__peek__mode_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/thin-client_2include_2ignite_2thin_2cache_2cache__peek__mode_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/time_8h.html b/releases/2.9.1/cppdoc/time_8h.html
index 5df62a2..c37da1c 100644
--- a/releases/2.9.1/cppdoc/time_8h.html
+++ b/releases/2.9.1/cppdoc/time_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/time_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/time_8h_source.html b/releases/2.9.1/cppdoc/time_8h_source.html
index e3a0996..deb7b14 100644
--- a/releases/2.9.1/cppdoc/time_8h_source.html
+++ b/releases/2.9.1/cppdoc/time_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/time_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/timestamp_8h.html b/releases/2.9.1/cppdoc/timestamp_8h.html
index 4b5376e..cb24d91 100644
--- a/releases/2.9.1/cppdoc/timestamp_8h.html
+++ b/releases/2.9.1/cppdoc/timestamp_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/timestamp_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/timestamp_8h_source.html b/releases/2.9.1/cppdoc/timestamp_8h_source.html
index 19c5b63..ef56c2a 100644
--- a/releases/2.9.1/cppdoc/timestamp_8h_source.html
+++ b/releases/2.9.1/cppdoc/timestamp_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/timestamp_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/transaction_8h.html b/releases/2.9.1/cppdoc/transaction_8h.html
index 578e603..0ec135c 100644
--- a/releases/2.9.1/cppdoc/transaction_8h.html
+++ b/releases/2.9.1/cppdoc/transaction_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/transaction_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/transaction_8h_source.html b/releases/2.9.1/cppdoc/transaction_8h_source.html
index 39d1c4f..ef94035 100644
--- a/releases/2.9.1/cppdoc/transaction_8h_source.html
+++ b/releases/2.9.1/cppdoc/transaction_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/transaction_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/transaction__consts_8h.html b/releases/2.9.1/cppdoc/transaction__consts_8h.html
index 4f45c99..bc8378d 100644
--- a/releases/2.9.1/cppdoc/transaction__consts_8h.html
+++ b/releases/2.9.1/cppdoc/transaction__consts_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/transaction__consts_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/transaction__consts_8h_source.html b/releases/2.9.1/cppdoc/transaction__consts_8h_source.html
index d672396..1b0e43d 100644
--- a/releases/2.9.1/cppdoc/transaction__consts_8h_source.html
+++ b/releases/2.9.1/cppdoc/transaction__consts_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/transaction__consts_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/transaction__metrics_8h.html b/releases/2.9.1/cppdoc/transaction__metrics_8h.html
index d5c6f14..451149d 100644
--- a/releases/2.9.1/cppdoc/transaction__metrics_8h.html
+++ b/releases/2.9.1/cppdoc/transaction__metrics_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/transaction__metrics_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/transaction__metrics_8h_source.html b/releases/2.9.1/cppdoc/transaction__metrics_8h_source.html
index 67767a2..90572c3 100644
--- a/releases/2.9.1/cppdoc/transaction__metrics_8h_source.html
+++ b/releases/2.9.1/cppdoc/transaction__metrics_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/transaction__metrics_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/transactions_8h.html b/releases/2.9.1/cppdoc/transactions_8h.html
index e1fc567..d1df7be 100644
--- a/releases/2.9.1/cppdoc/transactions_8h.html
+++ b/releases/2.9.1/cppdoc/transactions_8h.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/transactions_8h.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/cppdoc/transactions_8h_source.html b/releases/2.9.1/cppdoc/transactions_8h_source.html
index 6a29760..e05868c 100644
--- a/releases/2.9.1/cppdoc/transactions_8h_source.html
+++ b/releases/2.9.1/cppdoc/transactions_8h_source.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/cppdoc/transactions_8h_source.html" />
+
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.13"/>
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.AspNet.IgniteOutputCacheProvider.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.AspNet.IgniteOutputCacheProvider.html
index 338ea35..72567cb 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.AspNet.IgniteOutputCacheProvider.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.AspNet.IgniteOutputCacheProvider.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.AspNet.IgniteOutputCacheProvider.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.AspNet.IgniteOutputCacheProvider.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class IgniteOutputCacheProvider
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.AspNet.IgniteSessionStateStoreProvider.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.AspNet.IgniteSessionStateStoreProvider.html
index e4c5531..077455c 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.AspNet.IgniteSessionStateStoreProvider.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.AspNet.IgniteSessionStateStoreProvider.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.AspNet.IgniteSessionStateStoreProvider.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.AspNet.IgniteSessionStateStoreProvider.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class IgniteSessionStateStoreProvider
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.AspNet.IgniteWebUtils.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.AspNet.IgniteWebUtils.html
index 174cbae..e2937b9 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.AspNet.IgniteWebUtils.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.AspNet.IgniteWebUtils.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.AspNet.IgniteWebUtils.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.AspNet.IgniteWebUtils.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class IgniteWebUtils
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.AspNet.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.AspNet.html
index 1abc276..e2237ad 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.AspNet.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.AspNet.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.AspNet.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.AspNet.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.AspNet
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryBasicNameMapper.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryBasicNameMapper.html
index 507e020..487329c 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryBasicNameMapper.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryBasicNameMapper.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryBasicNameMapper.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryBasicNameMapper.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class BinaryBasicNameMapper
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryConfiguration.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryConfiguration.html
index 6aa140b..5f20626 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryConfiguration.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryConfiguration.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryConfiguration.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryConfiguration.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class BinaryConfiguration
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryObjectException.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryObjectException.html
index 4f43cb1..b733f74 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryObjectException.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryObjectException.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryObjectException.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryObjectException.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class BinaryObjectException
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryReflectiveSerializer.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryReflectiveSerializer.html
index 5c676b5..281e260 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryReflectiveSerializer.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryReflectiveSerializer.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryReflectiveSerializer.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryReflectiveSerializer.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class BinaryReflectiveSerializer
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryTypeConfiguration.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryTypeConfiguration.html
index a6b0e68..a1b8be8 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryTypeConfiguration.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryTypeConfiguration.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryTypeConfiguration.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryTypeConfiguration.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class BinaryTypeConfiguration
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryTypeNames.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryTypeNames.html
index b8db0d8..7a42486 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryTypeNames.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryTypeNames.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryTypeNames.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.BinaryTypeNames.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class BinaryTypeNames
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinarizable.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinarizable.html
index 1dc5195..72f6f5b 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinarizable.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinarizable.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinarizable.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinarizable.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IBinarizable
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinary.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinary.html
index 4282eac..1790fd7 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinary.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinary.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinary.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinary.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IBinary
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryIdMapper.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryIdMapper.html
index 7fa6938..a12f99e 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryIdMapper.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryIdMapper.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryIdMapper.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryIdMapper.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IBinaryIdMapper
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryNameMapper.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryNameMapper.html
index bcc8175..ea3b4d3 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryNameMapper.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryNameMapper.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryNameMapper.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryNameMapper.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IBinaryNameMapper
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryObject.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryObject.html
index 91d955f..25c2d4c 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryObject.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryObject.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryObject.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryObject.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IBinaryObject
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryObjectBuilder.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryObjectBuilder.html
index 536aa75..c1649c9 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryObjectBuilder.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryObjectBuilder.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryObjectBuilder.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryObjectBuilder.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IBinaryObjectBuilder
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryRawReader.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryRawReader.html
index 36c3b5a..47e93cf 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryRawReader.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryRawReader.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryRawReader.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryRawReader.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IBinaryRawReader
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryRawWriter.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryRawWriter.html
index d0400d3..438bbf8 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryRawWriter.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryRawWriter.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryRawWriter.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryRawWriter.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IBinaryRawWriter
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryReader.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryReader.html
index d8d8eb8..e91e543 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryReader.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryReader.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryReader.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryReader.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IBinaryReader
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinarySerializer.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinarySerializer.html
index 8915985..b398da9 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinarySerializer.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinarySerializer.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinarySerializer.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinarySerializer.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IBinarySerializer
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryType.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryType.html
index 94a2531..b37adff 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryType.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryType.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryType.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryType.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IBinaryType
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryWriter.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryWriter.html
index 71e64b8..4427ecc 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryWriter.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryWriter.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryWriter.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.IBinaryWriter.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IBinaryWriter
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.TimestampAttribute.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.TimestampAttribute.html
index 842253e..d18d573 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.TimestampAttribute.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.TimestampAttribute.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.TimestampAttribute.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.TimestampAttribute.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class TimestampAttribute
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.html
index 7a35a0d..eef5950 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Binary.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Binary.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Binary
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.AffinityFunctionBase.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.AffinityFunctionBase.html
index 926984a..e342885 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.AffinityFunctionBase.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.AffinityFunctionBase.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.AffinityFunctionBase.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.AffinityFunctionBase.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class AffinityFunctionBase
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.AffinityFunctionContext.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.AffinityFunctionContext.html
index 1fac017..658a00c 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.AffinityFunctionContext.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.AffinityFunctionContext.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.AffinityFunctionContext.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.AffinityFunctionContext.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class AffinityFunctionContext
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.AffinityKey.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.AffinityKey.html
index 120a636..dad269d 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.AffinityKey.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.AffinityKey.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.AffinityKey.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.AffinityKey.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Struct AffinityKey
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.AffinityKeyMappedAttribute.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.AffinityKeyMappedAttribute.html
index b238b93..731127e 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.AffinityKeyMappedAttribute.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.AffinityKeyMappedAttribute.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.AffinityKeyMappedAttribute.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.AffinityKeyMappedAttribute.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class AffinityKeyMappedAttribute
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.AffinityTopologyVersion.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.AffinityTopologyVersion.html
index f29fda8..c5c2543 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.AffinityTopologyVersion.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.AffinityTopologyVersion.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.AffinityTopologyVersion.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.AffinityTopologyVersion.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Struct AffinityTopologyVersion
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.IAffinityFunction.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.IAffinityFunction.html
index 8b05898..676a4ab 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.IAffinityFunction.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.IAffinityFunction.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.IAffinityFunction.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.IAffinityFunction.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IAffinityFunction
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.Rendezvous.RendezvousAffinityFunction.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.Rendezvous.RendezvousAffinityFunction.html
index 7424a11..43b77fd 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.Rendezvous.RendezvousAffinityFunction.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.Rendezvous.RendezvousAffinityFunction.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.Rendezvous.RendezvousAffinityFunction.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.Rendezvous.RendezvousAffinityFunction.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class RendezvousAffinityFunction
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.Rendezvous.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.Rendezvous.html
index ac95197..78c3475 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.Rendezvous.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.Rendezvous.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.Rendezvous.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.Rendezvous.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Cache.Affinity.Rendezvous
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.html
index 9bd4e84..3dee4eb 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Affinity.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Cache.Affinity
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.CacheEntryProcessorException.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.CacheEntryProcessorException.html
index 6823c6c..510b69a 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.CacheEntryProcessorException.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.CacheEntryProcessorException.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.CacheEntryProcessorException.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.CacheEntryProcessorException.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class CacheEntryProcessorException
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.CacheException.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.CacheException.html
index 897a3e3..6b7423e 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.CacheException.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.CacheException.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.CacheException.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.CacheException.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class CacheException
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.CachePartialUpdateException.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.CachePartialUpdateException.html
index 7128422..6fc20b0 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.CachePartialUpdateException.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.CachePartialUpdateException.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.CachePartialUpdateException.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.CachePartialUpdateException.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class CachePartialUpdateException
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.CachePeekMode.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.CachePeekMode.html
index 5901477..67341d5 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.CachePeekMode.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.CachePeekMode.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.CachePeekMode.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.CachePeekMode.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Enum CachePeekMode
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.CacheResult-1.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.CacheResult-1.html
index 79982f6..dba3ca2 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.CacheResult-1.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.CacheResult-1.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.CacheResult-1.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.CacheResult-1.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Struct CacheResult&lt;T&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheAtomicityMode.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheAtomicityMode.html
index ea0be4f..e69361b 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheAtomicityMode.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheAtomicityMode.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheAtomicityMode.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheAtomicityMode.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Enum CacheAtomicityMode
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheConfiguration.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheConfiguration.html
index 314f4a1..c03151d 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheConfiguration.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheConfiguration.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheConfiguration.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheConfiguration.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class CacheConfiguration
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheKeyConfiguration.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheKeyConfiguration.html
index c491ce9..fb0e3fd 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheKeyConfiguration.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheKeyConfiguration.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheKeyConfiguration.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheKeyConfiguration.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class CacheKeyConfiguration
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheMode.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheMode.html
index 89a67ff..9a7fc65 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheMode.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheMode.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheMode.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheMode.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Enum CacheMode
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheRebalanceMode.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheRebalanceMode.html
index 25400d6..873130f 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheRebalanceMode.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheRebalanceMode.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheRebalanceMode.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheRebalanceMode.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Enum CacheRebalanceMode
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheWriteSynchronizationMode.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheWriteSynchronizationMode.html
index e689326..1fd7f2b 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheWriteSynchronizationMode.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheWriteSynchronizationMode.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheWriteSynchronizationMode.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.CacheWriteSynchronizationMode.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Enum CacheWriteSynchronizationMode
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.DataPageEvictionMode.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.DataPageEvictionMode.html
index 367ab7b..4a1acc2 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.DataPageEvictionMode.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.DataPageEvictionMode.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.DataPageEvictionMode.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.DataPageEvictionMode.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Enum DataPageEvictionMode
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.MemoryConfiguration.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.MemoryConfiguration.html
index 4b78add..85192b3 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.MemoryConfiguration.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.MemoryConfiguration.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.MemoryConfiguration.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.MemoryConfiguration.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class MemoryConfiguration
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.MemoryPolicyConfiguration.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.MemoryPolicyConfiguration.html
index 3b4466b..d8a4399 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.MemoryPolicyConfiguration.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.MemoryPolicyConfiguration.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.MemoryPolicyConfiguration.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.MemoryPolicyConfiguration.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class MemoryPolicyConfiguration
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.NearCacheConfiguration.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.NearCacheConfiguration.html
index 24e4401..10265d2 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.NearCacheConfiguration.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.NearCacheConfiguration.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.NearCacheConfiguration.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.NearCacheConfiguration.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class NearCacheConfiguration
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.PartitionLossPolicy.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.PartitionLossPolicy.html
index 2e60924..f2358c5 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.PartitionLossPolicy.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.PartitionLossPolicy.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.PartitionLossPolicy.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.PartitionLossPolicy.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Enum PartitionLossPolicy
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.PlatformCacheConfiguration.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.PlatformCacheConfiguration.html
index 1f71628..83bba57 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.PlatformCacheConfiguration.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.PlatformCacheConfiguration.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.PlatformCacheConfiguration.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.PlatformCacheConfiguration.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class PlatformCacheConfiguration
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryAlias.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryAlias.html
index 8230413..e7337ad 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryAlias.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryAlias.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryAlias.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryAlias.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class QueryAlias
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryEntity.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryEntity.html
index 9c9ffcf..062d181 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryEntity.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryEntity.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryEntity.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryEntity.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class QueryEntity
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryField.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryField.html
index 52f1f99..76fbb84 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryField.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryField.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryField.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryField.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class QueryField
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryIndex.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryIndex.html
index 74b8660..cfe31ff 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryIndex.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryIndex.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryIndex.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryIndex.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class QueryIndex
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryIndexField.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryIndexField.html
index b32aaed..578cead 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryIndexField.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryIndexField.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryIndexField.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryIndexField.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class QueryIndexField
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryIndexType.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryIndexType.html
index 6a45b2a..7eccab1 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryIndexType.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryIndexType.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryIndexType.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryIndexType.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Enum QueryIndexType
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QuerySqlFieldAttribute.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QuerySqlFieldAttribute.html
index dbae1bc..aedb683 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QuerySqlFieldAttribute.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QuerySqlFieldAttribute.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QuerySqlFieldAttribute.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QuerySqlFieldAttribute.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class QuerySqlFieldAttribute
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryTextFieldAttribute.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryTextFieldAttribute.html
index 1d6791f..1ec1020 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryTextFieldAttribute.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryTextFieldAttribute.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryTextFieldAttribute.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.QueryTextFieldAttribute.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class QueryTextFieldAttribute
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.html
index 4750595..d57fdc1 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Configuration.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Cache.Configuration
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Event.CacheEntryEventType.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Event.CacheEntryEventType.html
index 34bdce1..53751c5 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Event.CacheEntryEventType.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Event.CacheEntryEventType.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Event.CacheEntryEventType.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Event.CacheEntryEventType.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Enum CacheEntryEventType
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Event.ICacheEntryEvent-2.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Event.ICacheEntryEvent-2.html
index 9dda33e..5b9ec5d 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Event.ICacheEntryEvent-2.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Event.ICacheEntryEvent-2.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Event.ICacheEntryEvent-2.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Event.ICacheEntryEvent-2.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface ICacheEntryEvent&lt;TK, TV&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Event.ICacheEntryEventFilter-2.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Event.ICacheEntryEventFilter-2.html
index 711c811..17bdd9c 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Event.ICacheEntryEventFilter-2.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Event.ICacheEntryEventFilter-2.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Event.ICacheEntryEventFilter-2.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Event.ICacheEntryEventFilter-2.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface ICacheEntryEventFilter&lt;TK, TV&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Event.ICacheEntryEventListener-2.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Event.ICacheEntryEventListener-2.html
index bdaa394..b910b58 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Event.ICacheEntryEventListener-2.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Event.ICacheEntryEventListener-2.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Event.ICacheEntryEventListener-2.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Event.ICacheEntryEventListener-2.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface ICacheEntryEventListener&lt;TK, TV&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Event.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Event.html
index 3b81179..8c835e1 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Event.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Event.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Event.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Event.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Cache.Event
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Eviction.EvictionPolicyBase.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Eviction.EvictionPolicyBase.html
index 6913604..079d0a2 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Eviction.EvictionPolicyBase.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Eviction.EvictionPolicyBase.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Eviction.EvictionPolicyBase.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Eviction.EvictionPolicyBase.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class EvictionPolicyBase
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Eviction.FifoEvictionPolicy.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Eviction.FifoEvictionPolicy.html
index 0a99134..e453710 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Eviction.FifoEvictionPolicy.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Eviction.FifoEvictionPolicy.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Eviction.FifoEvictionPolicy.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Eviction.FifoEvictionPolicy.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class FifoEvictionPolicy
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Eviction.IEvictionPolicy.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Eviction.IEvictionPolicy.html
index 0ebc580..54ccf99 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Eviction.IEvictionPolicy.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Eviction.IEvictionPolicy.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Eviction.IEvictionPolicy.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Eviction.IEvictionPolicy.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IEvictionPolicy
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Eviction.LruEvictionPolicy.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Eviction.LruEvictionPolicy.html
index 0f604e9..d11ee01 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Eviction.LruEvictionPolicy.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Eviction.LruEvictionPolicy.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Eviction.LruEvictionPolicy.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Eviction.LruEvictionPolicy.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class LruEvictionPolicy
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Eviction.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Eviction.html
index a1a3261..1b7ece9 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Eviction.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Eviction.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Eviction.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Eviction.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Cache.Eviction
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Expiry.ExpiryPolicy.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Expiry.ExpiryPolicy.html
index 1e37445..a74f29b 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Expiry.ExpiryPolicy.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Expiry.ExpiryPolicy.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Expiry.ExpiryPolicy.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Expiry.ExpiryPolicy.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class ExpiryPolicy
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Expiry.IExpiryPolicy.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Expiry.IExpiryPolicy.html
index f57e73a..917ca47 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Expiry.IExpiryPolicy.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Expiry.IExpiryPolicy.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Expiry.IExpiryPolicy.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Expiry.IExpiryPolicy.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IExpiryPolicy
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Expiry.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Expiry.html
index 42b618d..768c14c 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Expiry.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Expiry.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Expiry.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Expiry.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Cache.Expiry
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.ICache-2.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.ICache-2.html
index d3629a7..3bedc3c 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.ICache-2.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.ICache-2.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.ICache-2.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.ICache-2.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface ICache&lt;TK, TV&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheAffinity.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheAffinity.html
index f5feab4..9d59d7b 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheAffinity.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheAffinity.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheAffinity.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheAffinity.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface ICacheAffinity
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheEntry-2.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheEntry-2.html
index fbb8fb1..3196b0e 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheEntry-2.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheEntry-2.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheEntry-2.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheEntry-2.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface ICacheEntry&lt;TK, TV&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheEntryFilter-2.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheEntryFilter-2.html
index 6e7ec56..5922bed 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheEntryFilter-2.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheEntryFilter-2.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheEntryFilter-2.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheEntryFilter-2.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface ICacheEntryFilter&lt;TK, TV&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheEntryProcessor-4.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheEntryProcessor-4.html
index e9ef4bf..9d6bb7c 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheEntryProcessor-4.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheEntryProcessor-4.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheEntryProcessor-4.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheEntryProcessor-4.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface ICacheEntryProcessor&lt;TK, TV, TArg, TRes&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheEntryProcessorResult-2.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheEntryProcessorResult-2.html
index 95ab84a..68a36bb 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheEntryProcessorResult-2.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheEntryProcessorResult-2.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheEntryProcessorResult-2.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheEntryProcessorResult-2.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface ICacheEntryProcessorResult&lt;TK, T&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheLock.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheLock.html
index abb0e24..f19e8b2 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheLock.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheLock.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheLock.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheLock.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface ICacheLock
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheMetrics.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheMetrics.html
index da8ad9b..99d97e5 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheMetrics.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheMetrics.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheMetrics.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.ICacheMetrics.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface ICacheMetrics
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.IMemoryMetrics.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.IMemoryMetrics.html
index 7eb9513..f290f99 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.IMemoryMetrics.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.IMemoryMetrics.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.IMemoryMetrics.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.IMemoryMetrics.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IMemoryMetrics
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.IMutableCacheEntry-2.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.IMutableCacheEntry-2.html
index e4a8299..5583a93 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.IMutableCacheEntry-2.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.IMutableCacheEntry-2.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.IMutableCacheEntry-2.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.IMutableCacheEntry-2.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IMutableCacheEntry&lt;TK, TV&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.IQueryMetrics.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.IQueryMetrics.html
index f4ee207..c9b1406 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.IQueryMetrics.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.IQueryMetrics.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.IQueryMetrics.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.IQueryMetrics.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IQueryMetrics
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.ContinuousQuery-2.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.ContinuousQuery-2.html
index 5cfc41e..c3edfc9 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.ContinuousQuery-2.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.ContinuousQuery-2.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.ContinuousQuery-2.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.ContinuousQuery-2.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class ContinuousQuery&lt;TK, TV&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.ContinuousQuery.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.ContinuousQuery.html
index 7d9de0c..800b794 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.ContinuousQuery.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.ContinuousQuery.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.ContinuousQuery.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.ContinuousQuery.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class ContinuousQuery
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.ContinuousQueryExtensions.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.ContinuousQueryExtensions.html
index ec08243..3c106fd 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.ContinuousQueryExtensions.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.ContinuousQueryExtensions.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.ContinuousQueryExtensions.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.ContinuousQueryExtensions.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class ContinuousQueryExtensions
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.IContinuousQueryHandle-1.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.IContinuousQueryHandle-1.html
index b74d1a5..5ca1ab6 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.IContinuousQueryHandle-1.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.IContinuousQueryHandle-1.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.IContinuousQueryHandle-1.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.IContinuousQueryHandle-1.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IContinuousQueryHandle&lt;T&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.IContinuousQueryHandle.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.IContinuousQueryHandle.html
index c64c1a6..f44511e 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.IContinuousQueryHandle.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.IContinuousQueryHandle.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.IContinuousQueryHandle.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.IContinuousQueryHandle.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IContinuousQueryHandle
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.IContinuousQueryHandleFields.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.IContinuousQueryHandleFields.html
index 342444e..d25e434 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.IContinuousQueryHandleFields.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.IContinuousQueryHandleFields.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.IContinuousQueryHandleFields.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.IContinuousQueryHandleFields.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IContinuousQueryHandleFields
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.html
index 03b8044..5b0981b 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.Continuous.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Cache.Query.Continuous
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.IFieldsQueryCursor.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.IFieldsQueryCursor.html
index cefad3e..3f9af1b 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.IFieldsQueryCursor.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.IFieldsQueryCursor.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.IFieldsQueryCursor.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.IFieldsQueryCursor.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IFieldsQueryCursor
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.IQueryCursor-1.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.IQueryCursor-1.html
index 6e81959..0e9d074 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.IQueryCursor-1.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.IQueryCursor-1.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.IQueryCursor-1.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.IQueryCursor-1.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IQueryCursor&lt;T&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.IQueryCursorField.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.IQueryCursorField.html
index 33e4977..88f813f 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.IQueryCursorField.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.IQueryCursorField.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.IQueryCursorField.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.IQueryCursorField.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IQueryCursorField
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.QueryBase.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.QueryBase.html
index dafd58b..c4f43d3 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.QueryBase.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.QueryBase.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.QueryBase.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.QueryBase.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class QueryBase
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.ScanQuery-2.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.ScanQuery-2.html
index 7ee8e63..0f08673 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.ScanQuery-2.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.ScanQuery-2.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.ScanQuery-2.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.ScanQuery-2.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class ScanQuery&lt;TK, TV&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.SqlFieldsQuery.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.SqlFieldsQuery.html
index df64b61..f63edc3 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.SqlFieldsQuery.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.SqlFieldsQuery.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.SqlFieldsQuery.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.SqlFieldsQuery.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class SqlFieldsQuery
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.SqlQuery.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.SqlQuery.html
index 4934c13..ce92477 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.SqlQuery.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.SqlQuery.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.SqlQuery.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.SqlQuery.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class SqlQuery
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.TextQuery.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.TextQuery.html
index 8eacdbc..6530281 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.TextQuery.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.TextQuery.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.TextQuery.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.TextQuery.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class TextQuery
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.html
index 3cea4d3..1d4f145 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Query.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Cache.Query
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.CacheParallelLoadStoreAdapter-3.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.CacheParallelLoadStoreAdapter-3.html
index bf5eb33..b49e137 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.CacheParallelLoadStoreAdapter-3.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.CacheParallelLoadStoreAdapter-3.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.CacheParallelLoadStoreAdapter-3.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.CacheParallelLoadStoreAdapter-3.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class CacheParallelLoadStoreAdapter&lt;TK, TV, TData&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.CacheStoreAdapter-2.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.CacheStoreAdapter-2.html
index 486cb9b..a0e0cf1 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.CacheStoreAdapter-2.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.CacheStoreAdapter-2.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.CacheStoreAdapter-2.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.CacheStoreAdapter-2.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class CacheStoreAdapter&lt;TK, TV&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.CacheStoreException.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.CacheStoreException.html
index f33ad7a..a1139d5 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.CacheStoreException.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.CacheStoreException.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.CacheStoreException.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.CacheStoreException.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class CacheStoreException
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.ICacheStore-2.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.ICacheStore-2.html
index 0b53253..724ac80 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.ICacheStore-2.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.ICacheStore-2.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.ICacheStore-2.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.ICacheStore-2.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface ICacheStore&lt;TK, TV&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.ICacheStore.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.ICacheStore.html
index 6d00403..8be0955 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.ICacheStore.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.ICacheStore.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.ICacheStore.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.ICacheStore.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface ICacheStore
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.ICacheStoreSession.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.ICacheStoreSession.html
index f61effb..c48d669 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.ICacheStoreSession.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.ICacheStoreSession.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.ICacheStoreSession.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.ICacheStoreSession.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface ICacheStoreSession
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.html
index de82299..3a91e87 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.Store.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Cache.Store
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.html
index 5b12d5a..d49c29f 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cache.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cache.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Cache
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.Cache.CacheClientConfiguration.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.Cache.CacheClientConfiguration.html
index dc2e8ec..488df59 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.Cache.CacheClientConfiguration.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.Cache.CacheClientConfiguration.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Client.Cache.CacheClientConfiguration.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Client.Cache.CacheClientConfiguration.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class CacheClientConfiguration
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.Cache.ICacheClient-2.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.Cache.ICacheClient-2.html
index a5716a3..8b115d4 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.Cache.ICacheClient-2.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.Cache.ICacheClient-2.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Client.Cache.ICacheClient-2.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Client.Cache.ICacheClient-2.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface ICacheClient&lt;TK, TV&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.Cache.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.Cache.html
index b3da4cd..2684de7 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.Cache.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.Cache.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Client.Cache.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Client.Cache.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Client.Cache
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.ClientStatusCode.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.ClientStatusCode.html
index 76de62e..c35f687 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.ClientStatusCode.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.ClientStatusCode.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Client.ClientStatusCode.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Client.ClientStatusCode.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Enum ClientStatusCode
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.Compute.IComputeClient.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.Compute.IComputeClient.html
index d2807bd..cf7ba81 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.Compute.IComputeClient.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.Compute.IComputeClient.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Client.Compute.IComputeClient.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Client.Compute.IComputeClient.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IComputeClient
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.Compute.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.Compute.html
index 66e520f..bbc613d 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.Compute.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.Compute.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Client.Compute.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Client.Compute.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Client.Compute
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.IClientCluster.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.IClientCluster.html
index d9cb0d6..c1f27c4 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.IClientCluster.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.IClientCluster.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Client.IClientCluster.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Client.IClientCluster.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IClientCluster
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.IClientClusterGroup.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.IClientClusterGroup.html
index 2462e03..4207a1f 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.IClientClusterGroup.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.IClientClusterGroup.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Client.IClientClusterGroup.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Client.IClientClusterGroup.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IClientClusterGroup
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.IClientClusterNode.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.IClientClusterNode.html
index eaff58a..171beee 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.IClientClusterNode.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.IClientClusterNode.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Client.IClientClusterNode.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Client.IClientClusterNode.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IClientClusterNode
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.IClientConnection.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.IClientConnection.html
index 93aec23..f0d5f6f 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.IClientConnection.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.IClientConnection.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Client.IClientConnection.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Client.IClientConnection.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IClientConnection
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.IIgniteClient.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.IIgniteClient.html
index 2868f6a..56958e6 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.IIgniteClient.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.IIgniteClient.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Client.IIgniteClient.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Client.IIgniteClient.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IIgniteClient
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.ISslStreamFactory.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.ISslStreamFactory.html
index a1cdc03..d0dec82 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.ISslStreamFactory.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.ISslStreamFactory.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Client.ISslStreamFactory.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Client.ISslStreamFactory.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface ISslStreamFactory
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.IgniteClientConfiguration.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.IgniteClientConfiguration.html
index c3392c0..ce3fa27 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.IgniteClientConfiguration.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.IgniteClientConfiguration.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Client.IgniteClientConfiguration.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Client.IgniteClientConfiguration.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class IgniteClientConfiguration
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.IgniteClientConfigurationSection.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.IgniteClientConfigurationSection.html
index bd260b1..d320216 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.IgniteClientConfigurationSection.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.IgniteClientConfigurationSection.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Client.IgniteClientConfigurationSection.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Client.IgniteClientConfigurationSection.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class IgniteClientConfigurationSection
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.IgniteClientException.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.IgniteClientException.html
index 8155362..a36923d 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.IgniteClientException.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.IgniteClientException.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Client.IgniteClientException.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Client.IgniteClientException.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class IgniteClientException
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.SslStreamFactory.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.SslStreamFactory.html
index 84db411..4b2822b 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.SslStreamFactory.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.SslStreamFactory.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Client.SslStreamFactory.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Client.SslStreamFactory.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class SslStreamFactory
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.html
index 1b05216..f26602e 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Client.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Client.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Client.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Client
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.ClusterGroupEmptyException.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.ClusterGroupEmptyException.html
index 8caa8da..4ede30f 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.ClusterGroupEmptyException.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.ClusterGroupEmptyException.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cluster.ClusterGroupEmptyException.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cluster.ClusterGroupEmptyException.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class ClusterGroupEmptyException
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.ClusterTopologyException.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.ClusterTopologyException.html
index ceb7737..ad0e590 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.ClusterTopologyException.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.ClusterTopologyException.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cluster.ClusterTopologyException.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cluster.ClusterTopologyException.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class ClusterTopologyException
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.IBaselineNode.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.IBaselineNode.html
index 9b0f3a3..8d68a6f 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.IBaselineNode.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.IBaselineNode.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cluster.IBaselineNode.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cluster.IBaselineNode.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IBaselineNode
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.ICluster.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.ICluster.html
index af061cb..a06f69d 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.ICluster.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.ICluster.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cluster.ICluster.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cluster.ICluster.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface ICluster
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.IClusterGroup.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.IClusterGroup.html
index 7df0040..7b08575 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.IClusterGroup.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.IClusterGroup.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cluster.IClusterGroup.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cluster.IClusterGroup.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IClusterGroup
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.IClusterMetrics.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.IClusterMetrics.html
index 6b24eb3..968ac10 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.IClusterMetrics.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.IClusterMetrics.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cluster.IClusterMetrics.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cluster.IClusterMetrics.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IClusterMetrics
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.IClusterNode.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.IClusterNode.html
index 0fc5997..4516405 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.IClusterNode.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.IClusterNode.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cluster.IClusterNode.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cluster.IClusterNode.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IClusterNode
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.IClusterNodeFilter.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.IClusterNodeFilter.html
index 49e9bb3..48b5e6b 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.IClusterNodeFilter.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.IClusterNodeFilter.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cluster.IClusterNodeFilter.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cluster.IClusterNodeFilter.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IClusterNodeFilter
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.html
index 0c71e0b..9561484 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Cluster.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cluster.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Cluster.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Cluster
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.ClientDisconnectedException.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.ClientDisconnectedException.html
index 977515d..d43ec85 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.ClientDisconnectedException.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.ClientDisconnectedException.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Common.ClientDisconnectedException.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Common.ClientDisconnectedException.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class ClientDisconnectedException
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.ExceptionFactory.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.ExceptionFactory.html
index 3cc2726..5a4ba62 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.ExceptionFactory.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.ExceptionFactory.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Common.ExceptionFactory.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Common.ExceptionFactory.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Delegate ExceptionFactory
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.IFactory-1.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.IFactory-1.html
index 77519bb..7119e06 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.IFactory-1.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.IFactory-1.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Common.IFactory-1.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Common.IFactory-1.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IFactory&lt;T&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteException.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteException.html
index 96a3f53..dcdf9b4 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteException.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteException.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteException.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteException.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class IgniteException
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteExperimentalAttribute.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteExperimentalAttribute.html
index 21219f8..9d916b7 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteExperimentalAttribute.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteExperimentalAttribute.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteExperimentalAttribute.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteExperimentalAttribute.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class IgniteExperimentalAttribute
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteFutureCancelledException.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteFutureCancelledException.html
index f49542b..2eaf47b 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteFutureCancelledException.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteFutureCancelledException.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteFutureCancelledException.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteFutureCancelledException.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class IgniteFutureCancelledException
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteGuid.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteGuid.html
index 1886bf6..6543109 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteGuid.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteGuid.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteGuid.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteGuid.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Struct IgniteGuid
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteIllegalStateException.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteIllegalStateException.html
index dae7581..d7e8855 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteIllegalStateException.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteIllegalStateException.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteIllegalStateException.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteIllegalStateException.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class IgniteIllegalStateException
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteProductVersion.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteProductVersion.html
index 14bad11..88e5ebe 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteProductVersion.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteProductVersion.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteProductVersion.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Common.IgniteProductVersion.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class IgniteProductVersion
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.JavaException.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.JavaException.html
index 4bbd662..95751e6 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.JavaException.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.JavaException.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Common.JavaException.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Common.JavaException.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class JavaException
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.html
index 553b10c..5ac5056 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Common.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Common.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Common.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Common
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Communication.ICommunicationSpi.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Communication.ICommunicationSpi.html
index d9d0a9e..90d53ce 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Communication.ICommunicationSpi.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Communication.ICommunicationSpi.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Communication.ICommunicationSpi.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Communication.ICommunicationSpi.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface ICommunicationSpi
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Communication.Tcp.TcpCommunicationSpi.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Communication.Tcp.TcpCommunicationSpi.html
index 12ea165..5bc9fd2 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Communication.Tcp.TcpCommunicationSpi.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Communication.Tcp.TcpCommunicationSpi.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Communication.Tcp.TcpCommunicationSpi.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Communication.Tcp.TcpCommunicationSpi.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class TcpCommunicationSpi
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Communication.Tcp.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Communication.Tcp.html
index 00c78c2..b43c807 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Communication.Tcp.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Communication.Tcp.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Communication.Tcp.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Communication.Tcp.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Communication.Tcp
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Communication.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Communication.html
index 17718fe..67c3247 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Communication.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Communication.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Communication.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Communication.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Communication
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeExecutionRejectedException.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeExecutionRejectedException.html
index aeca726..398c7f2 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeExecutionRejectedException.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeExecutionRejectedException.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeExecutionRejectedException.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeExecutionRejectedException.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class ComputeExecutionRejectedException
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeJobAdapter-1.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeJobAdapter-1.html
index 0d9f549..0184440 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeJobAdapter-1.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeJobAdapter-1.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeJobAdapter-1.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeJobAdapter-1.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class ComputeJobAdapter&lt;T&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeJobFailoverException.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeJobFailoverException.html
index db54c5c..c6c5554 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeJobFailoverException.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeJobFailoverException.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeJobFailoverException.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeJobFailoverException.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class ComputeJobFailoverException
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeJobResultPolicy.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeJobResultPolicy.html
index c630790..671b7da 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeJobResultPolicy.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeJobResultPolicy.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeJobResultPolicy.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeJobResultPolicy.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Enum ComputeJobResultPolicy
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeTaskAdapter-3.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeTaskAdapter-3.html
index f4a816d..d22b528 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeTaskAdapter-3.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeTaskAdapter-3.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeTaskAdapter-3.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeTaskAdapter-3.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class ComputeTaskAdapter&lt;TArg, TJobRes, TTaskRes&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeTaskCancelledException.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeTaskCancelledException.html
index 34f0c13..5b47664 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeTaskCancelledException.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeTaskCancelledException.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeTaskCancelledException.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeTaskCancelledException.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class ComputeTaskCancelledException
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeTaskNoResultCacheAttribute.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeTaskNoResultCacheAttribute.html
index 2d6b156..319a9c8 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeTaskNoResultCacheAttribute.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeTaskNoResultCacheAttribute.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeTaskNoResultCacheAttribute.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeTaskNoResultCacheAttribute.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class ComputeTaskNoResultCacheAttribute
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeTaskSplitAdapter-3.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeTaskSplitAdapter-3.html
index ac06e0f..06ffa15 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeTaskSplitAdapter-3.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeTaskSplitAdapter-3.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeTaskSplitAdapter-3.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeTaskSplitAdapter-3.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class ComputeTaskSplitAdapter&lt;TArg, TJobRes, TTaskRes&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeTaskTimeoutException.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeTaskTimeoutException.html
index 3b6ed9f..8f07f9d 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeTaskTimeoutException.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeTaskTimeoutException.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeTaskTimeoutException.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeTaskTimeoutException.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class ComputeTaskTimeoutException
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeUserUndeclaredException.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeUserUndeclaredException.html
index 37d6971..17ed74b 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeUserUndeclaredException.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeUserUndeclaredException.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeUserUndeclaredException.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeUserUndeclaredException.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class ComputeUserUndeclaredException
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ICompute.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ICompute.html
index 40a772a..874bc81 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ICompute.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.ICompute.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.ICompute.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.ICompute.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface ICompute
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeAction.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeAction.html
index 76a85f5..9ae0c03 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeAction.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeAction.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeAction.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeAction.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IComputeAction
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeFunc-1.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeFunc-1.html
index 4de836c..8398e79 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeFunc-1.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeFunc-1.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeFunc-1.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeFunc-1.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IComputeFunc&lt;TRes&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeFunc-2.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeFunc-2.html
index fcb68c0..2e83382 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeFunc-2.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeFunc-2.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeFunc-2.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeFunc-2.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IComputeFunc&lt;TArg, TRes&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeJob-1.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeJob-1.html
index 1125e42..1ec0a26 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeJob-1.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeJob-1.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeJob-1.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeJob-1.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IComputeJob&lt;TRes&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeJobResult-1.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeJobResult-1.html
index f573548..cd84579 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeJobResult-1.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeJobResult-1.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeJobResult-1.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeJobResult-1.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IComputeJobResult&lt;TRes&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeReducer-2.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeReducer-2.html
index 6eff874..8b2d209 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeReducer-2.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeReducer-2.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeReducer-2.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeReducer-2.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IComputeReducer&lt;TRes, TReduceRes&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeTask-2.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeTask-2.html
index 0ae79e7..d633c83 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeTask-2.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeTask-2.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeTask-2.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeTask-2.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IComputeTask&lt;TJobRes, TReduceRes&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeTask-3.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeTask-3.html
index 9955fe7..c0709b2 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeTask-3.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeTask-3.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeTask-3.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.IComputeTask-3.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IComputeTask&lt;TArg, TJobRes, TRes&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.html
index 88aa180..cead8b2 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Compute.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Compute
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.CheckpointWriteOrder.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.CheckpointWriteOrder.html
index ee732e8..739a7a9 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.CheckpointWriteOrder.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.CheckpointWriteOrder.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Configuration.CheckpointWriteOrder.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Configuration.CheckpointWriteOrder.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Enum CheckpointWriteOrder
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.ClientConnectorConfiguration.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.ClientConnectorConfiguration.html
index 6fc55ce..62485b0 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.ClientConnectorConfiguration.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.ClientConnectorConfiguration.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Configuration.ClientConnectorConfiguration.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Configuration.ClientConnectorConfiguration.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class ClientConnectorConfiguration
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.DataPageEvictionMode.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.DataPageEvictionMode.html
index e7aac04..2531d26 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.DataPageEvictionMode.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.DataPageEvictionMode.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Configuration.DataPageEvictionMode.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Configuration.DataPageEvictionMode.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Enum DataPageEvictionMode
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.DataRegionConfiguration.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.DataRegionConfiguration.html
index d24206f..7a8dc5a 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.DataRegionConfiguration.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.DataRegionConfiguration.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Configuration.DataRegionConfiguration.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Configuration.DataRegionConfiguration.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class DataRegionConfiguration
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.DataStorageConfiguration.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.DataStorageConfiguration.html
index c1592b2..5daa02f 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.DataStorageConfiguration.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.DataStorageConfiguration.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Configuration.DataStorageConfiguration.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Configuration.DataStorageConfiguration.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class DataStorageConfiguration
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.DiskPageCompression.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.DiskPageCompression.html
index 08470d8..5f3c2f3 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.DiskPageCompression.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.DiskPageCompression.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Configuration.DiskPageCompression.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Configuration.DiskPageCompression.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Enum DiskPageCompression
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.ExecutorConfiguration.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.ExecutorConfiguration.html
index aaa5cb9..76309ae 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.ExecutorConfiguration.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.ExecutorConfiguration.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Configuration.ExecutorConfiguration.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Configuration.ExecutorConfiguration.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class ExecutorConfiguration
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.LockConfiguration.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.LockConfiguration.html
index d45a17d..2be99c0 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.LockConfiguration.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.LockConfiguration.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Configuration.LockConfiguration.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Configuration.LockConfiguration.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class LockConfiguration
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.SqlConnectorConfiguration.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.SqlConnectorConfiguration.html
index 7e4f757..8eb26ca 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.SqlConnectorConfiguration.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.SqlConnectorConfiguration.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Configuration.SqlConnectorConfiguration.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Configuration.SqlConnectorConfiguration.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class SqlConnectorConfiguration
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.ThinClientConfiguration.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.ThinClientConfiguration.html
index 004e180..4620f37 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.ThinClientConfiguration.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.ThinClientConfiguration.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Configuration.ThinClientConfiguration.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Configuration.ThinClientConfiguration.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class ThinClientConfiguration
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.WalMode.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.WalMode.html
index 26639b7..135fe5d 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.WalMode.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.WalMode.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Configuration.WalMode.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Configuration.WalMode.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Enum WalMode
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.html
index 422135d..0f8ad0f 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Configuration.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Configuration.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Configuration.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Configuration
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.DataStructures.Configuration.AtomicConfiguration.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.DataStructures.Configuration.AtomicConfiguration.html
index f43bfb5..882aea5 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.DataStructures.Configuration.AtomicConfiguration.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.DataStructures.Configuration.AtomicConfiguration.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.DataStructures.Configuration.AtomicConfiguration.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.DataStructures.Configuration.AtomicConfiguration.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class AtomicConfiguration
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.DataStructures.Configuration.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.DataStructures.Configuration.html
index f03be8d..4a7072c 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.DataStructures.Configuration.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.DataStructures.Configuration.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.DataStructures.Configuration.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.DataStructures.Configuration.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.DataStructures.Configuration
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.DataStructures.IAtomicLong.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.DataStructures.IAtomicLong.html
index 344d805..9589686 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.DataStructures.IAtomicLong.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.DataStructures.IAtomicLong.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.DataStructures.IAtomicLong.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.DataStructures.IAtomicLong.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IAtomicLong
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.DataStructures.IAtomicReference-1.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.DataStructures.IAtomicReference-1.html
index 0d74c34..5d46b71 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.DataStructures.IAtomicReference-1.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.DataStructures.IAtomicReference-1.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.DataStructures.IAtomicReference-1.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.DataStructures.IAtomicReference-1.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IAtomicReference&lt;T&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.DataStructures.IAtomicSequence.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.DataStructures.IAtomicSequence.html
index fb66bf4..0841d4a 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.DataStructures.IAtomicSequence.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.DataStructures.IAtomicSequence.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.DataStructures.IAtomicSequence.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.DataStructures.IAtomicSequence.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IAtomicSequence
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.DataStructures.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.DataStructures.html
index 29782e9..3463d12 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.DataStructures.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.DataStructures.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.DataStructures.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.DataStructures.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.DataStructures
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Datastream.DataStreamerDefaults.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Datastream.DataStreamerDefaults.html
index 6408f6c..9a9836d 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Datastream.DataStreamerDefaults.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Datastream.DataStreamerDefaults.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Datastream.DataStreamerDefaults.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Datastream.DataStreamerDefaults.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class DataStreamerDefaults
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Datastream.IDataStreamer-2.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Datastream.IDataStreamer-2.html
index aaa043d..e99e9f2 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Datastream.IDataStreamer-2.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Datastream.IDataStreamer-2.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Datastream.IDataStreamer-2.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Datastream.IDataStreamer-2.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IDataStreamer&lt;TK, TV&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Datastream.IStreamReceiver-2.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Datastream.IStreamReceiver-2.html
index 4179eca..88241fb 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Datastream.IStreamReceiver-2.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Datastream.IStreamReceiver-2.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Datastream.IStreamReceiver-2.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Datastream.IStreamReceiver-2.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IStreamReceiver&lt;TK, TV&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Datastream.StreamTransformer-4.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Datastream.StreamTransformer-4.html
index 7893356..249c201 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Datastream.StreamTransformer-4.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Datastream.StreamTransformer-4.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Datastream.StreamTransformer-4.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Datastream.StreamTransformer-4.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class StreamTransformer&lt;TK, TV, TArg, TRes&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Datastream.StreamVisitor-2.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Datastream.StreamVisitor-2.html
index 497627e..af2a231 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Datastream.StreamVisitor-2.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Datastream.StreamVisitor-2.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Datastream.StreamVisitor-2.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Datastream.StreamVisitor-2.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class StreamVisitor&lt;TK, TV&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Datastream.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Datastream.html
index e2bc5f3..c0ec3fe 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Datastream.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Datastream.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Datastream.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Datastream.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Datastream
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Deployment.PeerAssemblyLoadingMode.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Deployment.PeerAssemblyLoadingMode.html
index d313cbd..d579522 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Deployment.PeerAssemblyLoadingMode.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Deployment.PeerAssemblyLoadingMode.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Deployment.PeerAssemblyLoadingMode.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Deployment.PeerAssemblyLoadingMode.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Enum PeerAssemblyLoadingMode
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Deployment.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Deployment.html
index 86699a7..9d47e73 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Deployment.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Deployment.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Deployment.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Deployment.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Deployment
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.IDiscoverySpi.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.IDiscoverySpi.html
index 71285d6..4aff812 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.IDiscoverySpi.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.IDiscoverySpi.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Discovery.IDiscoverySpi.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Discovery.IDiscoverySpi.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IDiscoverySpi
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.ITcpDiscoveryIpFinder.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.ITcpDiscoveryIpFinder.html
index 7f7110d..0d4a9c6 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.ITcpDiscoveryIpFinder.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.ITcpDiscoveryIpFinder.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.ITcpDiscoveryIpFinder.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.ITcpDiscoveryIpFinder.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface ITcpDiscoveryIpFinder
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.Multicast.TcpDiscoveryMulticastIpFinder.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.Multicast.TcpDiscoveryMulticastIpFinder.html
index 82eed72..87d6321 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.Multicast.TcpDiscoveryMulticastIpFinder.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.Multicast.TcpDiscoveryMulticastIpFinder.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.Multicast.TcpDiscoveryMulticastIpFinder.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.Multicast.TcpDiscoveryMulticastIpFinder.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class TcpDiscoveryMulticastIpFinder
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.Multicast.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.Multicast.html
index 8fcc45e..b026b77 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.Multicast.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.Multicast.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.Multicast.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.Multicast.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Discovery.Tcp.Multicast
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.Static.TcpDiscoveryStaticIpFinder.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.Static.TcpDiscoveryStaticIpFinder.html
index 176714b..1b79057 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.Static.TcpDiscoveryStaticIpFinder.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.Static.TcpDiscoveryStaticIpFinder.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.Static.TcpDiscoveryStaticIpFinder.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.Static.TcpDiscoveryStaticIpFinder.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class TcpDiscoveryStaticIpFinder
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.Static.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.Static.html
index 795fecc..49bb993 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.Static.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.Static.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.Static.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.Static.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Discovery.Tcp.Static
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.TcpDiscoveryIpFinderBase.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.TcpDiscoveryIpFinderBase.html
index 44da55a..6630859 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.TcpDiscoveryIpFinderBase.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.TcpDiscoveryIpFinderBase.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.TcpDiscoveryIpFinderBase.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.TcpDiscoveryIpFinderBase.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class TcpDiscoveryIpFinderBase
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.TcpDiscoverySpi.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.TcpDiscoverySpi.html
index f0defa6..679305f 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.TcpDiscoverySpi.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.TcpDiscoverySpi.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.TcpDiscoverySpi.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.TcpDiscoverySpi.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class TcpDiscoverySpi
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.html
index c2b30e9..65d918a 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Discovery.Tcp.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Discovery.Tcp
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.html
index 39ffc44..0a1dc5c 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Discovery.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Discovery.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Discovery.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Discovery
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Encryption.IEncryptionSpi.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Encryption.IEncryptionSpi.html
index ead3e62..c1d2b3b 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Encryption.IEncryptionSpi.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Encryption.IEncryptionSpi.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Encryption.IEncryptionSpi.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Encryption.IEncryptionSpi.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IEncryptionSpi
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Encryption.Keystore.KeystoreEncryptionSpi.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Encryption.Keystore.KeystoreEncryptionSpi.html
index 00dc6be..68013e2 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Encryption.Keystore.KeystoreEncryptionSpi.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Encryption.Keystore.KeystoreEncryptionSpi.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Encryption.Keystore.KeystoreEncryptionSpi.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Encryption.Keystore.KeystoreEncryptionSpi.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class KeystoreEncryptionSpi
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Encryption.Keystore.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Encryption.Keystore.html
index 2b54016..8913d15 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Encryption.Keystore.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Encryption.Keystore.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Encryption.Keystore.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Encryption.Keystore.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Encryption.Keystore
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Encryption.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Encryption.html
index 5e09158..1afb0ff 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Encryption.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Encryption.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Encryption.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Encryption.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Encryption
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.CacheEvent.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.CacheEvent.html
index 325d88a..1093ea7 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.CacheEvent.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.CacheEvent.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.CacheEvent.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.CacheEvent.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class CacheEvent
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.CacheQueryExecutedEvent.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.CacheQueryExecutedEvent.html
index 48a7827..e10ad7b 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.CacheQueryExecutedEvent.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.CacheQueryExecutedEvent.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.CacheQueryExecutedEvent.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.CacheQueryExecutedEvent.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class CacheQueryExecutedEvent
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.CacheQueryReadEvent.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.CacheQueryReadEvent.html
index cbe4063..f3ce5c9 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.CacheQueryReadEvent.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.CacheQueryReadEvent.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.CacheQueryReadEvent.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.CacheQueryReadEvent.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class CacheQueryReadEvent
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.CacheRebalancingEvent.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.CacheRebalancingEvent.html
index bd2d308..d74c9b1 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.CacheRebalancingEvent.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.CacheRebalancingEvent.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.CacheRebalancingEvent.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.CacheRebalancingEvent.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class CacheRebalancingEvent
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.CheckpointEvent.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.CheckpointEvent.html
index 1e21ab8..40dee46 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.CheckpointEvent.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.CheckpointEvent.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.CheckpointEvent.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.CheckpointEvent.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class CheckpointEvent
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.DiscoveryEvent.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.DiscoveryEvent.html
index 346412c..7ebf310 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.DiscoveryEvent.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.DiscoveryEvent.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.DiscoveryEvent.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.DiscoveryEvent.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class DiscoveryEvent
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.EventBase.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.EventBase.html
index 18f9211..ee9023f 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.EventBase.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.EventBase.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.EventBase.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.EventBase.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class EventBase
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.EventType.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.EventType.html
index 8125927..10d2ed7 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.EventType.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.EventType.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.EventType.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.EventType.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class EventType
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.IEvent.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.IEvent.html
index f72803f..8fb4a5b 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.IEvent.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.IEvent.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.IEvent.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.IEvent.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IEvent
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.IEventFilter-1.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.IEventFilter-1.html
index fddb09c..415c99e 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.IEventFilter-1.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.IEventFilter-1.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.IEventFilter-1.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.IEventFilter-1.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IEventFilter&lt;T&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.IEventListener-1.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.IEventListener-1.html
index 402b59e..a15213a 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.IEventListener-1.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.IEventListener-1.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.IEventListener-1.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.IEventListener-1.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IEventListener&lt;T&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.IEventStorageSpi.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.IEventStorageSpi.html
index 91e55de..3f3acf1 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.IEventStorageSpi.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.IEventStorageSpi.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.IEventStorageSpi.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.IEventStorageSpi.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IEventStorageSpi
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.IEvents.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.IEvents.html
index 1a89e07..99e1120 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.IEvents.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.IEvents.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.IEvents.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.IEvents.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IEvents
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.JobEvent.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.JobEvent.html
index 4ea1880..35a5551 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.JobEvent.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.JobEvent.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.JobEvent.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.JobEvent.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class JobEvent
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.LocalEventListener-1.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.LocalEventListener-1.html
index 665c268..64a7344 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.LocalEventListener-1.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.LocalEventListener-1.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.LocalEventListener-1.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.LocalEventListener-1.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class LocalEventListener&lt;T&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.LocalEventListener.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.LocalEventListener.html
index fded50d..d82fbd6 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.LocalEventListener.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.LocalEventListener.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.LocalEventListener.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.LocalEventListener.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class LocalEventListener
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.MemoryEventStorageSpi.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.MemoryEventStorageSpi.html
index 357cc11..f17005b 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.MemoryEventStorageSpi.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.MemoryEventStorageSpi.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.MemoryEventStorageSpi.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.MemoryEventStorageSpi.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class MemoryEventStorageSpi
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.NoopEventStorageSpi.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.NoopEventStorageSpi.html
index 219b247..07cf17a 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.NoopEventStorageSpi.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.NoopEventStorageSpi.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.NoopEventStorageSpi.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.NoopEventStorageSpi.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class NoopEventStorageSpi
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.TaskEvent.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.TaskEvent.html
index f9da860..1715f78 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.TaskEvent.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.TaskEvent.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.TaskEvent.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.TaskEvent.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class TaskEvent
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.html
index 3e7d24f..ad2f26d 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Events.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Events.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Events
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Failure.IFailureHandler.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Failure.IFailureHandler.html
index 279b82e..5391ccb 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Failure.IFailureHandler.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Failure.IFailureHandler.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Failure.IFailureHandler.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Failure.IFailureHandler.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IFailureHandler
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Failure.NoOpFailureHandler.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Failure.NoOpFailureHandler.html
index 96c31d5..9306d6b 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Failure.NoOpFailureHandler.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Failure.NoOpFailureHandler.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Failure.NoOpFailureHandler.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Failure.NoOpFailureHandler.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class NoOpFailureHandler
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Failure.StopNodeFailureHandler.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Failure.StopNodeFailureHandler.html
index e7c69bd..bbfab06 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Failure.StopNodeFailureHandler.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Failure.StopNodeFailureHandler.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Failure.StopNodeFailureHandler.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Failure.StopNodeFailureHandler.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class StopNodeFailureHandler
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Failure.StopNodeOrHaltFailureHandler.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Failure.StopNodeOrHaltFailureHandler.html
index 0dc949c..3ccd304 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Failure.StopNodeOrHaltFailureHandler.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Failure.StopNodeOrHaltFailureHandler.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Failure.StopNodeOrHaltFailureHandler.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Failure.StopNodeOrHaltFailureHandler.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class StopNodeOrHaltFailureHandler
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Failure.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Failure.html
index 3de25af..85ba53e 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Failure.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Failure.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Failure.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Failure.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Failure
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.IDataRegionMetrics.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.IDataRegionMetrics.html
index bb82ce9..f5b163e 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.IDataRegionMetrics.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.IDataRegionMetrics.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.IDataRegionMetrics.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.IDataRegionMetrics.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IDataRegionMetrics
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.IDataStorageMetrics.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.IDataStorageMetrics.html
index a35de4f..09e119d 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.IDataStorageMetrics.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.IDataStorageMetrics.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.IDataStorageMetrics.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.IDataStorageMetrics.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IDataStorageMetrics
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.IIgnite.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.IIgnite.html
index cae0b72..8d896ba 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.IIgnite.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.IIgnite.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.IIgnite.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.IIgnite.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IIgnite
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.IIgniteLock.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.IIgniteLock.html
index d605ccb..1d988ac 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.IIgniteLock.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.IIgniteLock.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.IIgniteLock.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.IIgniteLock.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IIgniteLock
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.IgniteConfiguration.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.IgniteConfiguration.html
index b293774..5f7721c 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.IgniteConfiguration.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.IgniteConfiguration.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.IgniteConfiguration.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.IgniteConfiguration.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class IgniteConfiguration
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.IgniteConfigurationSection.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.IgniteConfigurationSection.html
index 38a5274..dbd79ea 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.IgniteConfigurationSection.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.IgniteConfigurationSection.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.IgniteConfigurationSection.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.IgniteConfigurationSection.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class IgniteConfigurationSection
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Ignition.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Ignition.html
index 18c392e..d5ff8ed 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Ignition.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Ignition.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Ignition.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Ignition.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class Ignition
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Interop.IPlatformTarget.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Interop.IPlatformTarget.html
index 9389286..f0dea43 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Interop.IPlatformTarget.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Interop.IPlatformTarget.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Interop.IPlatformTarget.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Interop.IPlatformTarget.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IPlatformTarget
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Interop.JavaObject.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Interop.JavaObject.html
index edf0962..b24c5d4 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Interop.JavaObject.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Interop.JavaObject.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Interop.JavaObject.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Interop.JavaObject.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class JavaObject
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Interop.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Interop.html
index b90b48e..e6a6224 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Interop.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Interop.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Interop.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Interop.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Interop
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Lifecycle.ClientReconnectEventArgs.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Lifecycle.ClientReconnectEventArgs.html
index dd217e4..c94f161 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Lifecycle.ClientReconnectEventArgs.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Lifecycle.ClientReconnectEventArgs.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Lifecycle.ClientReconnectEventArgs.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Lifecycle.ClientReconnectEventArgs.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class ClientReconnectEventArgs
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Lifecycle.ILifecycleHandler.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Lifecycle.ILifecycleHandler.html
index 785c2a6..754bcda 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Lifecycle.ILifecycleHandler.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Lifecycle.ILifecycleHandler.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Lifecycle.ILifecycleHandler.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Lifecycle.ILifecycleHandler.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface ILifecycleHandler
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Lifecycle.LifecycleEventType.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Lifecycle.LifecycleEventType.html
index 36fb22e..47d698d 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Lifecycle.LifecycleEventType.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Lifecycle.LifecycleEventType.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Lifecycle.LifecycleEventType.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Lifecycle.LifecycleEventType.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Enum LifecycleEventType
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Lifecycle.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Lifecycle.html
index 7275422..68c1082 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Lifecycle.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Lifecycle.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Lifecycle.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Lifecycle.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Lifecycle
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Log.CategoryLogger.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Log.CategoryLogger.html
index caf70a2..f39a873 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Log.CategoryLogger.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Log.CategoryLogger.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Log.CategoryLogger.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Log.CategoryLogger.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class CategoryLogger
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Log.ConsoleLogger.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Log.ConsoleLogger.html
index 9b6a9e7..edd4477 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Log.ConsoleLogger.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Log.ConsoleLogger.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Log.ConsoleLogger.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Log.ConsoleLogger.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class ConsoleLogger
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Log.IDateTimeProvider.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Log.IDateTimeProvider.html
index a766ddc..5749d28 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Log.IDateTimeProvider.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Log.IDateTimeProvider.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Log.IDateTimeProvider.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Log.IDateTimeProvider.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IDateTimeProvider
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Log.ILogger.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Log.ILogger.html
index bbdbd2a..9ddcffc 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Log.ILogger.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Log.ILogger.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Log.ILogger.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Log.ILogger.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface ILogger
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Log.LocalDateTimeProvider.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Log.LocalDateTimeProvider.html
index c57aed9..607e99d 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Log.LocalDateTimeProvider.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Log.LocalDateTimeProvider.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Log.LocalDateTimeProvider.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Log.LocalDateTimeProvider.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class LocalDateTimeProvider
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Log.LogLevel.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Log.LogLevel.html
index 37bd853..0e82471 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Log.LogLevel.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Log.LogLevel.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Log.LogLevel.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Log.LogLevel.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Enum LogLevel
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Log.LoggerExtensions.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Log.LoggerExtensions.html
index ac58c14..7de4244 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Log.LoggerExtensions.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Log.LoggerExtensions.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Log.LoggerExtensions.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Log.LoggerExtensions.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class LoggerExtensions
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Log.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Log.html
index 702c0d3..08275cb 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Log.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Log.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Log.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Log.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Log
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Messaging.IMessageListener-1.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Messaging.IMessageListener-1.html
index efbf3e5..dde2fc4 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Messaging.IMessageListener-1.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Messaging.IMessageListener-1.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Messaging.IMessageListener-1.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Messaging.IMessageListener-1.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IMessageListener&lt;T&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Messaging.IMessaging.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Messaging.IMessaging.html
index b841b0d..c584b9d 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Messaging.IMessaging.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Messaging.IMessaging.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Messaging.IMessaging.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Messaging.IMessaging.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IMessaging
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Messaging.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Messaging.html
index d593c99..f0d46f3 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Messaging.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Messaging.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Messaging.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Messaging.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Messaging
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.PersistentStore.CheckpointWriteOrder.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.PersistentStore.CheckpointWriteOrder.html
index 648c4a1..c6d70a9 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.PersistentStore.CheckpointWriteOrder.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.PersistentStore.CheckpointWriteOrder.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.PersistentStore.CheckpointWriteOrder.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.PersistentStore.CheckpointWriteOrder.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Enum CheckpointWriteOrder
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.PersistentStore.IPersistentStoreMetrics.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.PersistentStore.IPersistentStoreMetrics.html
index 3d3eed4..0d8c11d 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.PersistentStore.IPersistentStoreMetrics.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.PersistentStore.IPersistentStoreMetrics.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.PersistentStore.IPersistentStoreMetrics.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.PersistentStore.IPersistentStoreMetrics.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IPersistentStoreMetrics
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.PersistentStore.PersistentStoreConfiguration.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.PersistentStore.PersistentStoreConfiguration.html
index bc3e55d..75b5776 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.PersistentStore.PersistentStoreConfiguration.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.PersistentStore.PersistentStoreConfiguration.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.PersistentStore.PersistentStoreConfiguration.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.PersistentStore.PersistentStoreConfiguration.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class PersistentStoreConfiguration
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.PersistentStore.WalMode.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.PersistentStore.WalMode.html
index f63c9f7..e164675 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.PersistentStore.WalMode.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.PersistentStore.WalMode.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.PersistentStore.WalMode.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.PersistentStore.WalMode.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Enum WalMode
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.PersistentStore.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.PersistentStore.html
index 1a2a080..5bed74f 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.PersistentStore.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.PersistentStore.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.PersistentStore.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.PersistentStore.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.PersistentStore
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.Cache.ICachePluginConfiguration.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.Cache.ICachePluginConfiguration.html
index 839fb36..abedbc7 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.Cache.ICachePluginConfiguration.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.Cache.ICachePluginConfiguration.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Plugin.Cache.ICachePluginConfiguration.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Plugin.Cache.ICachePluginConfiguration.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface ICachePluginConfiguration
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.Cache.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.Cache.html
index 32ba2ef..2e6a89c 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.Cache.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.Cache.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Plugin.Cache.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Plugin.Cache.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Plugin.Cache
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.IPluginConfiguration.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.IPluginConfiguration.html
index 5f73d10..47f754f 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.IPluginConfiguration.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.IPluginConfiguration.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Plugin.IPluginConfiguration.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Plugin.IPluginConfiguration.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IPluginConfiguration
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.IPluginContext-1.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.IPluginContext-1.html
index 00e6650..7600a9a 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.IPluginContext-1.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.IPluginContext-1.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Plugin.IPluginContext-1.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Plugin.IPluginContext-1.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IPluginContext&lt;T&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.IPluginProvider-1.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.IPluginProvider-1.html
index 82af887..2512d29 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.IPluginProvider-1.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.IPluginProvider-1.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Plugin.IPluginProvider-1.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Plugin.IPluginProvider-1.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IPluginProvider&lt;TConfig&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.PluginCallback.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.PluginCallback.html
index 3ce7177..43cfcc3 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.PluginCallback.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.PluginCallback.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Plugin.PluginCallback.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Plugin.PluginCallback.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Delegate PluginCallback
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.PluginNotFoundException.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.PluginNotFoundException.html
index 73aa752..7da4a5b 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.PluginNotFoundException.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.PluginNotFoundException.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Plugin.PluginNotFoundException.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Plugin.PluginNotFoundException.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class PluginNotFoundException
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.PluginProviderTypeAttribute.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.PluginProviderTypeAttribute.html
index 85be601..d525bab 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.PluginProviderTypeAttribute.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.PluginProviderTypeAttribute.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Plugin.PluginProviderTypeAttribute.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Plugin.PluginProviderTypeAttribute.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class PluginProviderTypeAttribute
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.html
index 9274dd2..e095d52 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Plugin.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Plugin.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Plugin.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Plugin
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Resource.InstanceResourceAttribute.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Resource.InstanceResourceAttribute.html
index c9ddde1..1523e73 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Resource.InstanceResourceAttribute.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Resource.InstanceResourceAttribute.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Resource.InstanceResourceAttribute.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Resource.InstanceResourceAttribute.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class InstanceResourceAttribute
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Resource.StoreSessionResourceAttribute.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Resource.StoreSessionResourceAttribute.html
index d7d9736..a1574b1 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Resource.StoreSessionResourceAttribute.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Resource.StoreSessionResourceAttribute.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Resource.StoreSessionResourceAttribute.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Resource.StoreSessionResourceAttribute.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class StoreSessionResourceAttribute
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Resource.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Resource.html
index 99975a4..3dc74bc 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Resource.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Resource.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Resource.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Resource.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Resource
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Services.IService.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Services.IService.html
index f1bf8c5..c78b513 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Services.IService.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Services.IService.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Services.IService.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Services.IService.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IService
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Services.IServiceContext.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Services.IServiceContext.html
index 2111685..310dd8e 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Services.IServiceContext.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Services.IServiceContext.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Services.IServiceContext.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Services.IServiceContext.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IServiceContext
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Services.IServiceDescriptor.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Services.IServiceDescriptor.html
index 858fbdb..02c5375 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Services.IServiceDescriptor.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Services.IServiceDescriptor.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Services.IServiceDescriptor.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Services.IServiceDescriptor.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IServiceDescriptor
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Services.IServices.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Services.IServices.html
index 6de587b..2a2e1ee 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Services.IServices.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Services.IServices.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Services.IServices.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Services.IServices.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IServices
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Services.ServiceConfiguration.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Services.ServiceConfiguration.html
index abd92f8..a2d146c 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Services.ServiceConfiguration.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Services.ServiceConfiguration.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Services.ServiceConfiguration.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Services.ServiceConfiguration.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class ServiceConfiguration
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Services.ServiceDeploymentException.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Services.ServiceDeploymentException.html
index c44f315..587f885 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Services.ServiceDeploymentException.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Services.ServiceDeploymentException.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Services.ServiceDeploymentException.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Services.ServiceDeploymentException.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class ServiceDeploymentException
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Services.ServiceInvocationException.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Services.ServiceInvocationException.html
index cba3b83..597fa07 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Services.ServiceInvocationException.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Services.ServiceInvocationException.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Services.ServiceInvocationException.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Services.ServiceInvocationException.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class ServiceInvocationException
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Services.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Services.html
index b46f601..75b9cb6 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Services.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Services.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Services.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Services.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Services
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Ssl.ISslContextFactory.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Ssl.ISslContextFactory.html
index 31628be..83c0741 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Ssl.ISslContextFactory.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Ssl.ISslContextFactory.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Ssl.ISslContextFactory.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Ssl.ISslContextFactory.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface ISslContextFactory
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Ssl.SslContextFactory.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Ssl.SslContextFactory.html
index fd90b9c..210030e 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Ssl.SslContextFactory.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Ssl.SslContextFactory.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Ssl.SslContextFactory.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Ssl.SslContextFactory.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class SslContextFactory
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Ssl.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Ssl.html
index 05186cb..f678630 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Ssl.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Ssl.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Ssl.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Ssl.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Ssl
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.ITransaction.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.ITransaction.html
index f335a9d..8c2fe3e 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.ITransaction.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.ITransaction.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Transactions.ITransaction.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Transactions.ITransaction.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface ITransaction
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.ITransactionCollection.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.ITransactionCollection.html
index 4712fca..dd304fd 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.ITransactionCollection.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.ITransactionCollection.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Transactions.ITransactionCollection.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Transactions.ITransactionCollection.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface ITransactionCollection
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.ITransactionMetrics.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.ITransactionMetrics.html
index f0722bd..5a5a4fa 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.ITransactionMetrics.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.ITransactionMetrics.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Transactions.ITransactionMetrics.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Transactions.ITransactionMetrics.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface ITransactionMetrics
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.ITransactions.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.ITransactions.html
index 31eb686..e9bddaf 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.ITransactions.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.ITransactions.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Transactions.ITransactions.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Transactions.ITransactions.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface ITransactions
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionConcurrency.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionConcurrency.html
index 9cef2cb..79764ac 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionConcurrency.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionConcurrency.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionConcurrency.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionConcurrency.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Enum TransactionConcurrency
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionConfiguration.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionConfiguration.html
index e6b62cd..85fa1cf 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionConfiguration.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionConfiguration.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionConfiguration.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionConfiguration.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class TransactionConfiguration
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionDeadlockException.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionDeadlockException.html
index 0c40acf..5b1768a 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionDeadlockException.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionDeadlockException.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionDeadlockException.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionDeadlockException.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class TransactionDeadlockException
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionHeuristicException.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionHeuristicException.html
index b811f63..9b161c2 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionHeuristicException.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionHeuristicException.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionHeuristicException.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionHeuristicException.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class TransactionHeuristicException
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionIsolation.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionIsolation.html
index 740ca7b..6d77964 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionIsolation.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionIsolation.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionIsolation.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionIsolation.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Enum TransactionIsolation
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionOptimisticException.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionOptimisticException.html
index f7b4853..4d6c9cd 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionOptimisticException.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionOptimisticException.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionOptimisticException.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionOptimisticException.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class TransactionOptimisticException
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionRollbackException.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionRollbackException.html
index 566489d..c3461fc 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionRollbackException.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionRollbackException.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionRollbackException.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionRollbackException.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class TransactionRollbackException
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionState.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionState.html
index 58c6202..6abc5f3 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionState.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionState.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionState.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionState.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Enum TransactionState
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionTimeoutException.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionTimeoutException.html
index 32659cc..9247d0f 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionTimeoutException.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionTimeoutException.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionTimeoutException.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Transactions.TransactionTimeoutException.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class TransactionTimeoutException
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.html
index f7a6c12..c903f2e 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.Transactions.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Transactions.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Transactions.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core.Transactions
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.html
index f2302a8..ecfa476 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Core.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Core
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.EntityFramework.DbCachingMode.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.EntityFramework.DbCachingMode.html
index 16741b7..ab0a9cb 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.EntityFramework.DbCachingMode.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.EntityFramework.DbCachingMode.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.EntityFramework.DbCachingMode.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.EntityFramework.DbCachingMode.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Enum DbCachingMode
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.EntityFramework.DbCachingPolicy.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.EntityFramework.DbCachingPolicy.html
index ba52717..0678cc4 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.EntityFramework.DbCachingPolicy.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.EntityFramework.DbCachingPolicy.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.EntityFramework.DbCachingPolicy.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.EntityFramework.DbCachingPolicy.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class DbCachingPolicy
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.EntityFramework.DbQueryInfo.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.EntityFramework.DbQueryInfo.html
index 7420848..9164698 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.EntityFramework.DbQueryInfo.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.EntityFramework.DbQueryInfo.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.EntityFramework.DbQueryInfo.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.EntityFramework.DbQueryInfo.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class DbQueryInfo
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.EntityFramework.IDbCachingPolicy.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.EntityFramework.IDbCachingPolicy.html
index f090546..f0088f3 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.EntityFramework.IDbCachingPolicy.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.EntityFramework.IDbCachingPolicy.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.EntityFramework.IDbCachingPolicy.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.EntityFramework.IDbCachingPolicy.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IDbCachingPolicy
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.EntityFramework.IgniteDbConfiguration.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.EntityFramework.IgniteDbConfiguration.html
index 8eb0c2a..152322f 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.EntityFramework.IgniteDbConfiguration.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.EntityFramework.IgniteDbConfiguration.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.EntityFramework.IgniteDbConfiguration.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.EntityFramework.IgniteDbConfiguration.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class IgniteDbConfiguration
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.EntityFramework.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.EntityFramework.html
index 3a3c272..312807b 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.EntityFramework.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.EntityFramework.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.EntityFramework.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.EntityFramework.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.EntityFramework
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Linq.CacheClientLinqExtensions.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Linq.CacheClientLinqExtensions.html
index 779066a..a7f1114 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Linq.CacheClientLinqExtensions.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Linq.CacheClientLinqExtensions.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Linq.CacheClientLinqExtensions.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Linq.CacheClientLinqExtensions.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class CacheClientLinqExtensions
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Linq.CacheLinqExtensions.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Linq.CacheLinqExtensions.html
index 86b59e1..e31616e 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Linq.CacheLinqExtensions.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Linq.CacheLinqExtensions.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Linq.CacheLinqExtensions.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Linq.CacheLinqExtensions.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class CacheLinqExtensions
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Linq.CompiledQuery.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Linq.CompiledQuery.html
index 24b6904..bd6f5b0 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Linq.CompiledQuery.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Linq.CompiledQuery.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Linq.CompiledQuery.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Linq.CompiledQuery.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class CompiledQuery
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Linq.CompiledQueryFunc-1.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Linq.CompiledQueryFunc-1.html
index 35f65ea..21b034a 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Linq.CompiledQueryFunc-1.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Linq.CompiledQueryFunc-1.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Linq.CompiledQueryFunc-1.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Linq.CompiledQueryFunc-1.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Delegate CompiledQueryFunc&lt;T&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Linq.ICacheQueryable.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Linq.ICacheQueryable.html
index 0f1a6b5..585a26d 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Linq.ICacheQueryable.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Linq.ICacheQueryable.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Linq.ICacheQueryable.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Linq.ICacheQueryable.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface ICacheQueryable
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Linq.IUpdateDescriptor-2.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Linq.IUpdateDescriptor-2.html
index c45f050..f079690 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Linq.IUpdateDescriptor-2.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Linq.IUpdateDescriptor-2.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Linq.IUpdateDescriptor-2.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Linq.IUpdateDescriptor-2.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Interface IUpdateDescriptor&lt;TKey, TValue&gt;
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Linq.QueryOptions.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Linq.QueryOptions.html
index 8c109e4..42cfb47 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Linq.QueryOptions.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Linq.QueryOptions.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Linq.QueryOptions.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Linq.QueryOptions.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class QueryOptions
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Linq.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Linq.html
index 97a064e..28d0794 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Linq.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Linq.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Linq.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Linq.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Linq
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Log4Net.IgniteLog4NetLogger.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Log4Net.IgniteLog4NetLogger.html
index 6289df6..664d115 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Log4Net.IgniteLog4NetLogger.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Log4Net.IgniteLog4NetLogger.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Log4Net.IgniteLog4NetLogger.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Log4Net.IgniteLog4NetLogger.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class IgniteLog4NetLogger
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Log4Net.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Log4Net.html
index 2dd8741..fa38874 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Log4Net.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.Log4Net.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Log4Net.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Log4Net.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.Log4Net
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.NLog.IgniteNLogLogger.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.NLog.IgniteNLogLogger.html
index 2feb3db..4fbf5c6 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.NLog.IgniteNLogLogger.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.NLog.IgniteNLogLogger.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.NLog.IgniteNLogLogger.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.NLog.IgniteNLogLogger.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Class IgniteNLogLogger
diff --git a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.NLog.html b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.NLog.html
index 8eff9aa..a72425d 100644
--- a/releases/2.9.1/dotnetdoc/api/Apache.Ignite.NLog.html
+++ b/releases/2.9.1/dotnetdoc/api/Apache.Ignite.NLog.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.NLog.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.NLog.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Namespace Apache.Ignite.NLog
diff --git a/releases/2.9.1/dotnetdoc/api/index.html b/releases/2.9.1/dotnetdoc/api/index.html
index d438179..4d6f2f8 100644
--- a/releases/2.9.1/dotnetdoc/api/index.html
+++ b/releases/2.9.1/dotnetdoc/api/index.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/index.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/index.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Apache Ignite.NET API Documentation | Apache Ignite.NET </title>
diff --git a/releases/2.9.1/dotnetdoc/api/toc.html b/releases/2.9.1/dotnetdoc/api/toc.html
index 71f18cd..a4b2e0f 100644
--- a/releases/2.9.1/dotnetdoc/api/toc.html
+++ b/releases/2.9.1/dotnetdoc/api/toc.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/toc.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/toc.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Table of Content | Apache Ignite.NET </title>
diff --git a/releases/2.9.1/dotnetdoc/index.html b/releases/2.9.1/dotnetdoc/index.html
index 3b1973c..5cfc02d 100644
--- a/releases/2.9.1/dotnetdoc/index.html
+++ b/releases/2.9.1/dotnetdoc/index.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/index.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/index.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Apache Ignite.NET | Apache Ignite.NET </title>
diff --git a/releases/2.9.1/dotnetdoc/toc.html b/releases/2.9.1/dotnetdoc/toc.html
index a6167ff..b3a120a 100644
--- a/releases/2.9.1/dotnetdoc/toc.html
+++ b/releases/2.9.1/dotnetdoc/toc.html
@@ -3,7 +3,32 @@
 <html>
   
   <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/toc.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/toc.html" />
+
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <title>Table of Content | Apache Ignite.NET </title>
diff --git a/releases/2.9.1/javadoc/allclasses-frame.html b/releases/2.9.1/javadoc/allclasses-frame.html
index 59eb3cf..556168f 100644
--- a/releases/2.9.1/javadoc/allclasses-frame.html
+++ b/releases/2.9.1/javadoc/allclasses-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/allclasses-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:16 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>All Classes (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/allclasses-noframe.html b/releases/2.9.1/javadoc/allclasses-noframe.html
index 7acc13d..48ab943 100644
--- a/releases/2.9.1/javadoc/allclasses-noframe.html
+++ b/releases/2.9.1/javadoc/allclasses-noframe.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/allclasses-noframe.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:16 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>All Classes (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/constant-values.html b/releases/2.9.1/javadoc/constant-values.html
index 3eafd11..9504b7a 100644
--- a/releases/2.9.1/javadoc/constant-values.html
+++ b/releases/2.9.1/javadoc/constant-values.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/constant-values.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Constant Field Values (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/deprecated-list.html b/releases/2.9.1/javadoc/deprecated-list.html
index 8cfeefb..a0f46e4 100644
--- a/releases/2.9.1/javadoc/deprecated-list.html
+++ b/releases/2.9.1/javadoc/deprecated-list.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/deprecated-list.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:16 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Deprecated List (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/help-doc.html b/releases/2.9.1/javadoc/help-doc.html
index e6bc4a2..f403433 100644
--- a/releases/2.9.1/javadoc/help-doc.html
+++ b/releases/2.9.1/javadoc/help-doc.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/help-doc.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:16 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>API Help (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/index-all.html b/releases/2.9.1/javadoc/index-all.html
index c2111ad..6e8ce90 100644
--- a/releases/2.9.1/javadoc/index-all.html
+++ b/releases/2.9.1/javadoc/index-all.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/index-all.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:16 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Index (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/index.html b/releases/2.9.1/javadoc/index.html
index d5f1b25..b1c9432 100644
--- a/releases/2.9.1/javadoc/index.html
+++ b/releases/2.9.1/javadoc/index.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/index.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:16 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Ignite 2.9.1</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/DataRegionMetrics.html b/releases/2.9.1/javadoc/org/apache/ignite/DataRegionMetrics.html
index b3e1b36..266609d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/DataRegionMetrics.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/DataRegionMetrics.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/DataRegionMetrics.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DataRegionMetrics (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/DataRegionMetricsAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/DataRegionMetricsAdapter.html
index 254f872..76d55a7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/DataRegionMetricsAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/DataRegionMetricsAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/DataRegionMetricsAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DataRegionMetricsAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/DataRegionMetricsProvider.html b/releases/2.9.1/javadoc/org/apache/ignite/DataRegionMetricsProvider.html
index 1216a70..852606d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/DataRegionMetricsProvider.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/DataRegionMetricsProvider.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/DataRegionMetricsProvider.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DataRegionMetricsProvider (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/DataStorageMetrics.html b/releases/2.9.1/javadoc/org/apache/ignite/DataStorageMetrics.html
index db867c0..6b5411b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/DataStorageMetrics.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/DataStorageMetrics.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/DataStorageMetrics.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DataStorageMetrics (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/DataStorageMetricsAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/DataStorageMetricsAdapter.html
index 944df8c..8f178a1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/DataStorageMetricsAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/DataStorageMetricsAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/DataStorageMetricsAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DataStorageMetricsAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/Ignite.html b/releases/2.9.1/javadoc/org/apache/ignite/Ignite.html
index d5a21b3..baf9834 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/Ignite.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/Ignite.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/Ignite.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Ignite (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteAtomicLong.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteAtomicLong.html
index ea758b5..78daafa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteAtomicLong.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteAtomicLong.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteAtomicLong.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteAtomicLong (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteAtomicReference.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteAtomicReference.html
index db9409f..5adde5e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteAtomicReference.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteAtomicReference.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteAtomicReference.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteAtomicReference (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteAtomicSequence.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteAtomicSequence.html
index 791e4e6..c03c3c7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteAtomicSequence.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteAtomicSequence.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteAtomicSequence.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteAtomicSequence (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteAtomicStamped.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteAtomicStamped.html
index 11f73af..9715717 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteAtomicStamped.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteAtomicStamped.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteAtomicStamped.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteAtomicStamped (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteAuthenticationException.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteAuthenticationException.html
index 3d301f7..1a29a33 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteAuthenticationException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteAuthenticationException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteAuthenticationException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteAuthenticationException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteBinary.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteBinary.html
index e8aa56c..7dd44f1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteBinary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteBinary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteBinary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteBinary (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteCache.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteCache.html
index 10cf4b5..3e89c97 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteCache.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteCache.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteCache.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteCache (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteCacheRestartingException.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteCacheRestartingException.html
index 1752b79..e39b9ec 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteCacheRestartingException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteCacheRestartingException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteCacheRestartingException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteCacheRestartingException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteCheckedException.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteCheckedException.html
index fd1b990..17dabff 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteCheckedException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteCheckedException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteCheckedException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteCheckedException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteClientDisconnectedException.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteClientDisconnectedException.html
index da9a663..fb6703a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteClientDisconnectedException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteClientDisconnectedException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteClientDisconnectedException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteClientDisconnectedException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteCluster.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteCluster.html
index e487dbe..141bab0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteCluster.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteCluster.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteCluster.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteCluster (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteCompute.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteCompute.html
index 009d755..fe97110 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteCompute.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteCompute.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteCompute.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteCompute (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteCondition.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteCondition.html
index e5b8e1e..afe559d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteCondition.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteCondition.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteCondition.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteCondition (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteCountDownLatch.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteCountDownLatch.html
index 2b6bc9d..d7331bc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteCountDownLatch.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteCountDownLatch.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteCountDownLatch.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteCountDownLatch (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteDataStreamer.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteDataStreamer.html
index 76644b4..ad37c2c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteDataStreamer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteDataStreamer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteDataStreamer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteDataStreamer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteDataStreamerTimeoutException.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteDataStreamerTimeoutException.html
index bd49f57..9cad5b9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteDataStreamerTimeoutException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteDataStreamerTimeoutException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteDataStreamerTimeoutException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteDataStreamerTimeoutException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteDeploymentException.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteDeploymentException.html
index cc7189b..e32b9b5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteDeploymentException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteDeploymentException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteDeploymentException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteDeploymentException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteEncryption.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteEncryption.html
index eb2d28f..51438af 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteEncryption.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteEncryption.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteEncryption.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteEncryption (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteEvents.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteEvents.html
index d1ed826..8bfd732 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteEvents.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteEvents.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteEvents.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:06 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteEvents (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteException.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteException.html
index 9b87b4f..1869872 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:06 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteIllegalStateException.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteIllegalStateException.html
index 210405b..d49a78c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteIllegalStateException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteIllegalStateException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteIllegalStateException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:06 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteIllegalStateException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteInterruptedException.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteInterruptedException.html
index 04912ba..2f6723b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteInterruptedException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteInterruptedException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteInterruptedException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:06 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteInterruptedException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteJdbcDriver.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteJdbcDriver.html
index e35bb43..c131d20 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteJdbcDriver.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteJdbcDriver.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteJdbcDriver.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:06 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteJdbcDriver (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteJdbcThinDataSource.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteJdbcThinDataSource.html
index f353b5e..e96dfc6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteJdbcThinDataSource.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteJdbcThinDataSource.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteJdbcThinDataSource.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:06 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteJdbcThinDataSource (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteJdbcThinDriver.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteJdbcThinDriver.html
index b196531..4d42935 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteJdbcThinDriver.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteJdbcThinDriver.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteJdbcThinDriver.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:06 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteJdbcThinDriver (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteLock.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteLock.html
index 3f1a0a0..df385e2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteLock.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteLock.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteLock.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:06 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteLock (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteLogger.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteLogger.html
index c9b3108..6ef82b1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteLogger.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteLogger.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteLogger.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:06 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteLogger (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteMessaging.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteMessaging.html
index b66928c..5115c39 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteMessaging.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteMessaging.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteMessaging.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:06 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteMessaging (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteQueue.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteQueue.html
index d03756d..d3f3b07 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteQueue.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteQueue.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteQueue.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:06 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteQueue (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteScheduler.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteScheduler.html
index 97c14f5..b708a53 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteScheduler.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteScheduler.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteScheduler.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:06 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteScheduler (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteSemaphore.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteSemaphore.html
index 2510cce..2ad54b2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteSemaphore.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteSemaphore.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteSemaphore.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:06 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteSemaphore (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteServices.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteServices.html
index c9de6d7..9d7ac76 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteServices.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteServices.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteServices.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:06 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteServices (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteSet.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteSet.html
index b87eed3..31b51b7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteSet.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteSet.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteSet.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:06 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteSet (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteSnapshot.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteSnapshot.html
index ce74b86..7369328 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteSnapshot.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteSnapshot.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteSnapshot.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:06 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteSnapshot (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteSpring.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteSpring.html
index 7c180de..ef00e6c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteSpring.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteSpring.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteSpring.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:06 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteSpring (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteSpringBean.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteSpringBean.html
index f810658..5341597 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteSpringBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteSpringBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteSpringBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteSpringBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteState.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteState.html
index b1bf051..4b8d955 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteState.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteState.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteState.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteState (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteSystemProperties.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteSystemProperties.html
index 5d34418..ccb69b8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteSystemProperties.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteSystemProperties.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteSystemProperties.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteSystemProperties (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgniteTransactions.html b/releases/2.9.1/javadoc/org/apache/ignite/IgniteTransactions.html
index 293a425..bf5aa8a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgniteTransactions.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgniteTransactions.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteTransactions.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteTransactions (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/Ignition.html b/releases/2.9.1/javadoc/org/apache/ignite/Ignition.html
index 21110d1..0a9af8a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/Ignition.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/Ignition.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/Ignition.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Ignition (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/IgnitionListener.html b/releases/2.9.1/javadoc/org/apache/ignite/IgnitionListener.html
index 4d2fa51..6ba3411 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/IgnitionListener.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/IgnitionListener.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgnitionListener.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgnitionListener (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/MemoryMetrics.html b/releases/2.9.1/javadoc/org/apache/ignite/MemoryMetrics.html
index b5cb87f..313a541 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/MemoryMetrics.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/MemoryMetrics.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/MemoryMetrics.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MemoryMetrics (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/PersistenceMetrics.html b/releases/2.9.1/javadoc/org/apache/ignite/PersistenceMetrics.html
index 6552707..1c3538d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/PersistenceMetrics.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/PersistenceMetrics.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/PersistenceMetrics.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PersistenceMetrics (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryBasicIdMapper.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryBasicIdMapper.html
index 79d95bc..a102867 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryBasicIdMapper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryBasicIdMapper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/BinaryBasicIdMapper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BinaryBasicIdMapper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryBasicNameMapper.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryBasicNameMapper.html
index 264c5b6..75b05eb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryBasicNameMapper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryBasicNameMapper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/BinaryBasicNameMapper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BinaryBasicNameMapper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryCollectionFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryCollectionFactory.html
index 3f4be8f..1c6b351 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryCollectionFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryCollectionFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/BinaryCollectionFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BinaryCollectionFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryField.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryField.html
index e099360..2383bb4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryField.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryField.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/BinaryField.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BinaryField (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryIdMapper.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryIdMapper.html
index 17abf8d..1ad0919 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryIdMapper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryIdMapper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/BinaryIdMapper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BinaryIdMapper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryInvalidTypeException.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryInvalidTypeException.html
index f8f3d40..a8a3f4f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryInvalidTypeException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryInvalidTypeException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/BinaryInvalidTypeException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BinaryInvalidTypeException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryMapFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryMapFactory.html
index 09d4800..fb90886 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryMapFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryMapFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/BinaryMapFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BinaryMapFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryNameMapper.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryNameMapper.html
index ad8b4ad..2c9cbfe 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryNameMapper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryNameMapper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/BinaryNameMapper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BinaryNameMapper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryObject.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryObject.html
index a7a5016..a9301b1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryObject.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryObject.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/BinaryObject.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BinaryObject (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryObjectBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryObjectBuilder.html
index 8278301..aa007a5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryObjectBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryObjectBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/BinaryObjectBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BinaryObjectBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryObjectException.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryObjectException.html
index bde9fb0..7e41fee 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryObjectException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryObjectException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/BinaryObjectException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BinaryObjectException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryRawReader.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryRawReader.html
index 791861e..2565974 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryRawReader.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryRawReader.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/BinaryRawReader.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BinaryRawReader (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryRawWriter.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryRawWriter.html
index 548ff94..7ff8a49 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryRawWriter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryRawWriter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/BinaryRawWriter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BinaryRawWriter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryReader.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryReader.html
index b1ec651..c79f2c6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryReader.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryReader.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/BinaryReader.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BinaryReader (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryReflectiveSerializer.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryReflectiveSerializer.html
index 1e2513a..e1e8c42 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryReflectiveSerializer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryReflectiveSerializer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/BinaryReflectiveSerializer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BinaryReflectiveSerializer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinarySerializer.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinarySerializer.html
index 1c86c9a..617f2e0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinarySerializer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinarySerializer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/BinarySerializer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BinarySerializer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryType.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryType.html
index f5f8926..95b5348 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryType.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryType.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/BinaryType.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BinaryType (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryTypeConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryTypeConfiguration.html
index 8921826..96f8690 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryTypeConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryTypeConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/BinaryTypeConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BinaryTypeConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryWriter.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryWriter.html
index 88058fc..adf30b2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryWriter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/BinaryWriter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/BinaryWriter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BinaryWriter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/Binarylizable.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/Binarylizable.html
index 7f723cf..eb76795 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/Binarylizable.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/Binarylizable.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/Binarylizable.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Binarylizable (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryBasicIdMapper.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryBasicIdMapper.html
index ec86b6d..79d9dc8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryBasicIdMapper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryBasicIdMapper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/class-use/BinaryBasicIdMapper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.binary.BinaryBasicIdMapper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryBasicNameMapper.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryBasicNameMapper.html
index e2c1f7d..95dc4c8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryBasicNameMapper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryBasicNameMapper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/class-use/BinaryBasicNameMapper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.binary.BinaryBasicNameMapper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryCollectionFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryCollectionFactory.html
index 9da3fd8..29ff5ef 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryCollectionFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryCollectionFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/class-use/BinaryCollectionFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.binary.BinaryCollectionFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryField.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryField.html
index 31a7e2c..23b823e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryField.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryField.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/class-use/BinaryField.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.binary.BinaryField (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryIdMapper.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryIdMapper.html
index 72aa506..d5730d8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryIdMapper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryIdMapper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/class-use/BinaryIdMapper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.binary.BinaryIdMapper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryInvalidTypeException.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryInvalidTypeException.html
index 2e2cd52..ddfd433 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryInvalidTypeException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryInvalidTypeException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/class-use/BinaryInvalidTypeException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.binary.BinaryInvalidTypeException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryMapFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryMapFactory.html
index 373a7ec..9509c65 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryMapFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryMapFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/class-use/BinaryMapFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.binary.BinaryMapFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryNameMapper.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryNameMapper.html
index f3d7bf1..74bf6a7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryNameMapper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryNameMapper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/class-use/BinaryNameMapper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.binary.BinaryNameMapper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryObject.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryObject.html
index 9dd367b..c32898f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryObject.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryObject.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/class-use/BinaryObject.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.binary.BinaryObject (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryObjectBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryObjectBuilder.html
index a74ca38..e6d4079 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryObjectBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryObjectBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/class-use/BinaryObjectBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.binary.BinaryObjectBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryObjectException.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryObjectException.html
index dfc16b1..e571369 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryObjectException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryObjectException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/class-use/BinaryObjectException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.binary.BinaryObjectException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryRawReader.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryRawReader.html
index 8b931dc..d19d543 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryRawReader.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryRawReader.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/class-use/BinaryRawReader.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.binary.BinaryRawReader (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryRawWriter.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryRawWriter.html
index 1c41f41..21716a2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryRawWriter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryRawWriter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/class-use/BinaryRawWriter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.binary.BinaryRawWriter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryReader.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryReader.html
index 7139b27..800e734 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryReader.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryReader.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/class-use/BinaryReader.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.binary.BinaryReader (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryReflectiveSerializer.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryReflectiveSerializer.html
index f4b84e8..3e4d837 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryReflectiveSerializer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryReflectiveSerializer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/class-use/BinaryReflectiveSerializer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.binary.BinaryReflectiveSerializer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinarySerializer.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinarySerializer.html
index 814f58f..3daafdb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinarySerializer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinarySerializer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/class-use/BinarySerializer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.binary.BinarySerializer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryType.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryType.html
index 979f1f0..9d1eb3d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryType.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryType.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/class-use/BinaryType.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.binary.BinaryType (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryTypeConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryTypeConfiguration.html
index e98faa7..30718e4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryTypeConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryTypeConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/class-use/BinaryTypeConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.binary.BinaryTypeConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryWriter.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryWriter.html
index 670c17d..8269d84 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryWriter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/BinaryWriter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/class-use/BinaryWriter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.binary.BinaryWriter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/Binarylizable.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/Binarylizable.html
index e993ebc..18af0e6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/Binarylizable.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/class-use/Binarylizable.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/class-use/Binarylizable.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.binary.Binarylizable (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/package-frame.html
index aaee2b7..caea8c6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.binary (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/package-summary.html
index 82349bc..b00c704 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.binary (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/package-tree.html
index 50d33f8..0a3b5e2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.binary Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/binary/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/binary/package-use.html
index 861bf7d..d535af6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/binary/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/binary/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/binary/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.binary (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheAtomicityMode.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheAtomicityMode.html
index a26f8f1..9e07811 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheAtomicityMode.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheAtomicityMode.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/CacheAtomicityMode.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheAtomicityMode (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheEntry.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheEntry.html
index b91c414..9e0ddfe 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheEntry.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheEntry.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/CacheEntry.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheEntry (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheEntryEventSerializableFilter.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheEntryEventSerializableFilter.html
index 044640b..42dc12a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheEntryEventSerializableFilter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheEntryEventSerializableFilter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/CacheEntryEventSerializableFilter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheEntryEventSerializableFilter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheEntryProcessor.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheEntryProcessor.html
index 0adf7d5..72a803c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheEntryProcessor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheEntryProcessor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/CacheEntryProcessor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheEntryProcessor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheExistsException.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheExistsException.html
index ced00d7..dcbc453 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheExistsException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheExistsException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/CacheExistsException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheExistsException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheInterceptor.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheInterceptor.html
index 0f60bb9..c836b27 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheInterceptor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheInterceptor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/CacheInterceptor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheInterceptor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheInterceptorAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheInterceptorAdapter.html
index e1c92fd..28758d2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheInterceptorAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheInterceptorAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/CacheInterceptorAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheInterceptorAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheInterceptorEntry.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheInterceptorEntry.html
index fd7a47d..c693d3a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheInterceptorEntry.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheInterceptorEntry.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/CacheInterceptorEntry.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheInterceptorEntry (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheKeyConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheKeyConfiguration.html
index 15c937f..131489d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheKeyConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheKeyConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/CacheKeyConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheKeyConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheManager.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheManager.html
index 59132e9..1b00d1a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheManager.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheManager.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/CacheManager.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheManager (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheMetrics.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheMetrics.html
index ebde59a..b9c806c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheMetrics.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheMetrics.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/CacheMetrics.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheMetrics (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheMode.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheMode.html
index 4076a71..4e5e9a8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheMode.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheMode.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/CacheMode.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheMode (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/CachePartialUpdateException.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/CachePartialUpdateException.html
index c414450..a82fb85 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/CachePartialUpdateException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/CachePartialUpdateException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/CachePartialUpdateException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CachePartialUpdateException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/CachePeekMode.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/CachePeekMode.html
index ba5aca1..37e6edf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/CachePeekMode.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/CachePeekMode.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/CachePeekMode.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CachePeekMode (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheRebalanceMode.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheRebalanceMode.html
index 82521af..3649574 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheRebalanceMode.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheRebalanceMode.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/CacheRebalanceMode.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheRebalanceMode (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheServerNotFoundException.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheServerNotFoundException.html
index a6187df..3298a39 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheServerNotFoundException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheServerNotFoundException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/CacheServerNotFoundException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheServerNotFoundException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheWriteSynchronizationMode.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheWriteSynchronizationMode.html
index 20c462c..d0d469b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheWriteSynchronizationMode.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/CacheWriteSynchronizationMode.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/CacheWriteSynchronizationMode.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheWriteSynchronizationMode (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/CachingProvider.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/CachingProvider.html
index 13d672c..0cccc0f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/CachingProvider.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/CachingProvider.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/CachingProvider.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CachingProvider (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/PartitionLossPolicy.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/PartitionLossPolicy.html
index 5e2adab..399f2d0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/PartitionLossPolicy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/PartitionLossPolicy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/PartitionLossPolicy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PartitionLossPolicy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/QueryEntity.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/QueryEntity.html
index 1cc7ab7..5edddac 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/QueryEntity.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/QueryEntity.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/QueryEntity.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>QueryEntity (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/QueryEntityPatch.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/QueryEntityPatch.html
index 66b7bb8..bcc42cb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/QueryEntityPatch.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/QueryEntityPatch.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/QueryEntityPatch.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>QueryEntityPatch (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/QueryIndex.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/QueryIndex.html
index 24f9c72..406bb5c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/QueryIndex.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/QueryIndex.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/QueryIndex.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>QueryIndex (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/QueryIndexType.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/QueryIndexType.html
index 2f1d712..81c1032 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/QueryIndexType.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/QueryIndexType.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/QueryIndexType.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>QueryIndexType (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/Affinity.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/Affinity.html
index 71cd4d2..8617618 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/Affinity.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/Affinity.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/affinity/Affinity.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Affinity (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/AffinityCentralizedFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/AffinityCentralizedFunction.html
index fdba7b2..327c576 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/AffinityCentralizedFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/AffinityCentralizedFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/affinity/AffinityCentralizedFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>AffinityCentralizedFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/AffinityFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/AffinityFunction.html
index 398b23a..c2d5ed8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/AffinityFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/AffinityFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/affinity/AffinityFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>AffinityFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/AffinityFunctionContext.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/AffinityFunctionContext.html
index 80e26fc..e07af4d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/AffinityFunctionContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/AffinityFunctionContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/affinity/AffinityFunctionContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>AffinityFunctionContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/AffinityKey.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/AffinityKey.html
index 2e6e52c..0ab24ee 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/AffinityKey.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/AffinityKey.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/affinity/AffinityKey.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>AffinityKey (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/AffinityKeyMapped.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/AffinityKeyMapped.html
index 628010c..cef6b2e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/AffinityKeyMapped.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/AffinityKeyMapped.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/affinity/AffinityKeyMapped.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>AffinityKeyMapped (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/AffinityKeyMapper.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/AffinityKeyMapper.html
index e998d5f..d7b5181 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/AffinityKeyMapper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/AffinityKeyMapper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/affinity/AffinityKeyMapper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>AffinityKeyMapper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/AffinityUuid.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/AffinityUuid.html
index 76ceb16..75d23bc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/AffinityUuid.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/AffinityUuid.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/affinity/AffinityUuid.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>AffinityUuid (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/class-use/Affinity.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/class-use/Affinity.html
index 8e2d99d..dc1100a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/class-use/Affinity.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/class-use/Affinity.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/affinity/class-use/Affinity.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.affinity.Affinity (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/class-use/AffinityCentralizedFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/class-use/AffinityCentralizedFunction.html
index b6fa961..d61448e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/class-use/AffinityCentralizedFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/class-use/AffinityCentralizedFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/affinity/class-use/AffinityCentralizedFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.affinity.AffinityCentralizedFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/class-use/AffinityFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/class-use/AffinityFunction.html
index cb1c592..445f9ff 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/class-use/AffinityFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/class-use/AffinityFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/affinity/class-use/AffinityFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.affinity.AffinityFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/class-use/AffinityFunctionContext.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/class-use/AffinityFunctionContext.html
index c2ef91f..04b740d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/class-use/AffinityFunctionContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/class-use/AffinityFunctionContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/affinity/class-use/AffinityFunctionContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.affinity.AffinityFunctionContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/class-use/AffinityKey.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/class-use/AffinityKey.html
index 19a93de..590f232 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/class-use/AffinityKey.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/class-use/AffinityKey.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/affinity/class-use/AffinityKey.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.affinity.AffinityKey (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/class-use/AffinityKeyMapped.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/class-use/AffinityKeyMapped.html
index 6dd6c7c..4284c44 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/class-use/AffinityKeyMapped.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/class-use/AffinityKeyMapped.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/affinity/class-use/AffinityKeyMapped.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.affinity.AffinityKeyMapped (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/class-use/AffinityKeyMapper.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/class-use/AffinityKeyMapper.html
index 1f691e3..9f69f4d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/class-use/AffinityKeyMapper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/class-use/AffinityKeyMapper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/affinity/class-use/AffinityKeyMapper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.affinity.AffinityKeyMapper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/class-use/AffinityUuid.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/class-use/AffinityUuid.html
index 71a9d44..86c5ec0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/class-use/AffinityUuid.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/class-use/AffinityUuid.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/affinity/class-use/AffinityUuid.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.affinity.AffinityUuid (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/package-frame.html
index 4e99199..2d9dfdb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/affinity/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.affinity (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/package-summary.html
index 548321e..430596c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/affinity/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.affinity (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/package-tree.html
index db900c2..88b2f91 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/affinity/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.affinity Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/package-use.html
index ffc7de0..3064db5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/affinity/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.cache.affinity (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/rendezvous/ClusterNodeAttributeAffinityBackupFilter.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/rendezvous/ClusterNodeAttributeAffinityBackupFilter.html
index fe55d05..82062fe 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/rendezvous/ClusterNodeAttributeAffinityBackupFilter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/rendezvous/ClusterNodeAttributeAffinityBackupFilter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/affinity/rendezvous/ClusterNodeAttributeAffinityBackupFilter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClusterNodeAttributeAffinityBackupFilter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/rendezvous/RendezvousAffinityFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/rendezvous/RendezvousAffinityFunction.html
index 9db7bbd..1f4fd08 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/rendezvous/RendezvousAffinityFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/rendezvous/RendezvousAffinityFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/affinity/rendezvous/RendezvousAffinityFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>RendezvousAffinityFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/rendezvous/class-use/ClusterNodeAttributeAffinityBackupFilter.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/rendezvous/class-use/ClusterNodeAttributeAffinityBackupFilter.html
index 99d3e75..451c075 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/rendezvous/class-use/ClusterNodeAttributeAffinityBackupFilter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/rendezvous/class-use/ClusterNodeAttributeAffinityBackupFilter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/affinity/rendezvous/class-use/ClusterNodeAttributeAffinityBackupFilter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.affinity.rendezvous.ClusterNodeAttributeAffinityBackupFilter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/rendezvous/class-use/RendezvousAffinityFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/rendezvous/class-use/RendezvousAffinityFunction.html
index c87848a..574b6d8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/rendezvous/class-use/RendezvousAffinityFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/rendezvous/class-use/RendezvousAffinityFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/affinity/rendezvous/class-use/RendezvousAffinityFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/rendezvous/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/rendezvous/package-frame.html
index fa6f20f..56d255c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/rendezvous/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/rendezvous/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/affinity/rendezvous/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.affinity.rendezvous (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/rendezvous/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/rendezvous/package-summary.html
index fa741ba..e93f6de 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/rendezvous/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/rendezvous/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/affinity/rendezvous/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.affinity.rendezvous (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/rendezvous/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/rendezvous/package-tree.html
index f8e6b71..828b5d8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/rendezvous/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/rendezvous/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/affinity/rendezvous/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.affinity.rendezvous Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/rendezvous/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/rendezvous/package-use.html
index abe13af..b3f186e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/rendezvous/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/affinity/rendezvous/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/affinity/rendezvous/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.cache.affinity.rendezvous (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheAtomicityMode.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheAtomicityMode.html
index e4f558e..afa9428 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheAtomicityMode.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheAtomicityMode.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/class-use/CacheAtomicityMode.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.CacheAtomicityMode (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheEntry.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheEntry.html
index 8a42e7f..f778ed1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheEntry.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheEntry.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/class-use/CacheEntry.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.CacheEntry (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheEntryEventSerializableFilter.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheEntryEventSerializableFilter.html
index c2258ce..0c05b6f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheEntryEventSerializableFilter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheEntryEventSerializableFilter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/class-use/CacheEntryEventSerializableFilter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.CacheEntryEventSerializableFilter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheEntryProcessor.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheEntryProcessor.html
index 324d872..02ab0b6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheEntryProcessor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheEntryProcessor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/class-use/CacheEntryProcessor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.CacheEntryProcessor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheExistsException.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheExistsException.html
index 6a93686..2cba595 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheExistsException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheExistsException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/class-use/CacheExistsException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.CacheExistsException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheInterceptor.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheInterceptor.html
index d326ac0..50dc64c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheInterceptor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheInterceptor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/class-use/CacheInterceptor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.CacheInterceptor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheInterceptorAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheInterceptorAdapter.html
index 27e3370..879b41b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheInterceptorAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheInterceptorAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/class-use/CacheInterceptorAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.CacheInterceptorAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheInterceptorEntry.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheInterceptorEntry.html
index 65c9b51..7c42b1d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheInterceptorEntry.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheInterceptorEntry.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/class-use/CacheInterceptorEntry.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.CacheInterceptorEntry (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheKeyConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheKeyConfiguration.html
index 351eab3..0c6ecf8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheKeyConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheKeyConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/class-use/CacheKeyConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.CacheKeyConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheManager.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheManager.html
index 495562e..bf1b2e7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheManager.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheManager.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/class-use/CacheManager.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.CacheManager (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheMetrics.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheMetrics.html
index ba4fa33..01cfb34 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheMetrics.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheMetrics.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/class-use/CacheMetrics.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.CacheMetrics (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheMode.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheMode.html
index 149cfee..6c2fc22 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheMode.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheMode.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/class-use/CacheMode.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.CacheMode (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CachePartialUpdateException.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CachePartialUpdateException.html
index 7d9d323..2772be8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CachePartialUpdateException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CachePartialUpdateException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/class-use/CachePartialUpdateException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.CachePartialUpdateException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CachePeekMode.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CachePeekMode.html
index 4c45db6..daac7ad 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CachePeekMode.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CachePeekMode.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/class-use/CachePeekMode.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.CachePeekMode (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheRebalanceMode.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheRebalanceMode.html
index 21ffbb8..9b27fff 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheRebalanceMode.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheRebalanceMode.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/class-use/CacheRebalanceMode.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.CacheRebalanceMode (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheServerNotFoundException.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheServerNotFoundException.html
index 5d1a8d8..f8964ef 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheServerNotFoundException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheServerNotFoundException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/class-use/CacheServerNotFoundException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.CacheServerNotFoundException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheWriteSynchronizationMode.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheWriteSynchronizationMode.html
index 5e69839..9921c98 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheWriteSynchronizationMode.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CacheWriteSynchronizationMode.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/class-use/CacheWriteSynchronizationMode.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.CacheWriteSynchronizationMode (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CachingProvider.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CachingProvider.html
index 0660246..58633e7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CachingProvider.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/CachingProvider.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/class-use/CachingProvider.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.CachingProvider (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/PartitionLossPolicy.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/PartitionLossPolicy.html
index ab8018e..a4ec811 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/PartitionLossPolicy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/PartitionLossPolicy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/class-use/PartitionLossPolicy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.PartitionLossPolicy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/QueryEntity.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/QueryEntity.html
index 3dfa308..438cf07 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/QueryEntity.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/QueryEntity.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/class-use/QueryEntity.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.QueryEntity (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/QueryEntityPatch.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/QueryEntityPatch.html
index 128d056..9609f06 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/QueryEntityPatch.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/QueryEntityPatch.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/class-use/QueryEntityPatch.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.QueryEntityPatch (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/QueryIndex.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/QueryIndex.html
index 03f1ef7..f89383e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/QueryIndex.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/QueryIndex.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/class-use/QueryIndex.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.QueryIndex (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/QueryIndexType.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/QueryIndexType.html
index b0909ba..9af7309 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/QueryIndexType.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/class-use/QueryIndexType.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/class-use/QueryIndexType.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.QueryIndexType (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/AbstractEvictionPolicy.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/AbstractEvictionPolicy.html
index ae1f2d5..85c23e6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/AbstractEvictionPolicy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/AbstractEvictionPolicy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/AbstractEvictionPolicy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>AbstractEvictionPolicy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/AbstractEvictionPolicyFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/AbstractEvictionPolicyFactory.html
index 1c8da6e..be63257 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/AbstractEvictionPolicyFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/AbstractEvictionPolicyFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/AbstractEvictionPolicyFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>AbstractEvictionPolicyFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/EvictableEntry.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/EvictableEntry.html
index 5a3ab99..5121d1b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/EvictableEntry.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/EvictableEntry.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/EvictableEntry.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>EvictableEntry (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/EvictionFilter.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/EvictionFilter.html
index 6bab80d..1ab96c5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/EvictionFilter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/EvictionFilter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/EvictionFilter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>EvictionFilter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/EvictionPolicy.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/EvictionPolicy.html
index 30f7873..75e07bd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/EvictionPolicy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/EvictionPolicy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/EvictionPolicy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>EvictionPolicy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/class-use/AbstractEvictionPolicy.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/class-use/AbstractEvictionPolicy.html
index 25bc565..76ef7c9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/class-use/AbstractEvictionPolicy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/class-use/AbstractEvictionPolicy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/class-use/AbstractEvictionPolicy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.eviction.AbstractEvictionPolicy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/class-use/AbstractEvictionPolicyFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/class-use/AbstractEvictionPolicyFactory.html
index 9c69ef8..108a183 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/class-use/AbstractEvictionPolicyFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/class-use/AbstractEvictionPolicyFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/class-use/AbstractEvictionPolicyFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.eviction.AbstractEvictionPolicyFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/class-use/EvictableEntry.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/class-use/EvictableEntry.html
index 81a99c0..1e0f694 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/class-use/EvictableEntry.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/class-use/EvictableEntry.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/class-use/EvictableEntry.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.eviction.EvictableEntry (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/class-use/EvictionFilter.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/class-use/EvictionFilter.html
index 4c4761d..17bddbd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/class-use/EvictionFilter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/class-use/EvictionFilter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/class-use/EvictionFilter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.eviction.EvictionFilter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/class-use/EvictionPolicy.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/class-use/EvictionPolicy.html
index 11e4b2f..e73c244 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/class-use/EvictionPolicy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/class-use/EvictionPolicy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/class-use/EvictionPolicy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.eviction.EvictionPolicy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/FifoEvictionPolicy.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/FifoEvictionPolicy.html
index a9030ef..549d302 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/FifoEvictionPolicy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/FifoEvictionPolicy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/fifo/FifoEvictionPolicy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>FifoEvictionPolicy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/FifoEvictionPolicyFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/FifoEvictionPolicyFactory.html
index 33df598..a82078d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/FifoEvictionPolicyFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/FifoEvictionPolicyFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/fifo/FifoEvictionPolicyFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>FifoEvictionPolicyFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/FifoEvictionPolicyMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/FifoEvictionPolicyMBean.html
index b0d27f6..ac8061e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/FifoEvictionPolicyMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/FifoEvictionPolicyMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/fifo/FifoEvictionPolicyMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>FifoEvictionPolicyMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/class-use/FifoEvictionPolicy.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/class-use/FifoEvictionPolicy.html
index a810749..f31e9d8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/class-use/FifoEvictionPolicy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/class-use/FifoEvictionPolicy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/fifo/class-use/FifoEvictionPolicy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.eviction.fifo.FifoEvictionPolicy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/class-use/FifoEvictionPolicyFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/class-use/FifoEvictionPolicyFactory.html
index 837c234..4f08b48 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/class-use/FifoEvictionPolicyFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/class-use/FifoEvictionPolicyFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/fifo/class-use/FifoEvictionPolicyFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.eviction.fifo.FifoEvictionPolicyFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/class-use/FifoEvictionPolicyMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/class-use/FifoEvictionPolicyMBean.html
index 84063ea..455d17e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/class-use/FifoEvictionPolicyMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/class-use/FifoEvictionPolicyMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/fifo/class-use/FifoEvictionPolicyMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.eviction.fifo.FifoEvictionPolicyMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/package-frame.html
index 7b6a809..dea3a7f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/fifo/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.eviction.fifo (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/package-summary.html
index d667de4..652fb04 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/fifo/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.eviction.fifo (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/package-tree.html
index 0717d11..e4927ae 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/fifo/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.eviction.fifo Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/package-use.html
index 8e2a64e..ad30b30 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/fifo/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/fifo/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.cache.eviction.fifo (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/LruEvictionPolicy.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/LruEvictionPolicy.html
index 6174780..3e4faae 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/LruEvictionPolicy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/LruEvictionPolicy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/lru/LruEvictionPolicy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LruEvictionPolicy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/LruEvictionPolicyFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/LruEvictionPolicyFactory.html
index 7ae18a4..39d473a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/LruEvictionPolicyFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/LruEvictionPolicyFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/lru/LruEvictionPolicyFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LruEvictionPolicyFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/LruEvictionPolicyMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/LruEvictionPolicyMBean.html
index 2ac8187..6b07e6a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/LruEvictionPolicyMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/LruEvictionPolicyMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/lru/LruEvictionPolicyMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LruEvictionPolicyMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/class-use/LruEvictionPolicy.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/class-use/LruEvictionPolicy.html
index fb32366..9e24d74 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/class-use/LruEvictionPolicy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/class-use/LruEvictionPolicy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/lru/class-use/LruEvictionPolicy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.eviction.lru.LruEvictionPolicy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/class-use/LruEvictionPolicyFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/class-use/LruEvictionPolicyFactory.html
index 5a23f49..7cbb1d6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/class-use/LruEvictionPolicyFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/class-use/LruEvictionPolicyFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/lru/class-use/LruEvictionPolicyFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.eviction.lru.LruEvictionPolicyFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/class-use/LruEvictionPolicyMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/class-use/LruEvictionPolicyMBean.html
index c0ab260..39658ce 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/class-use/LruEvictionPolicyMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/class-use/LruEvictionPolicyMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/lru/class-use/LruEvictionPolicyMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.eviction.lru.LruEvictionPolicyMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/package-frame.html
index 4e08886..79c7020 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/lru/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.eviction.lru (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/package-summary.html
index 19325b8..8cccfd3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/lru/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.eviction.lru (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/package-tree.html
index f28b7da..76ef752 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/lru/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.eviction.lru Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/package-use.html
index 00471c1..2bb080c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/lru/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/lru/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.cache.eviction.lru (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/package-frame.html
index 1dd2901..a3e4bd9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.eviction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/package-summary.html
index 8a6b6ad..5a4b5b8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.eviction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/package-tree.html
index 7855532..13a8857 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.eviction Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/package-use.html
index 9f364f9..fa5dedd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.cache.eviction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/random/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/random/package-frame.html
index 0eb0aca..1f9edbb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/random/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/random/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/random/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.eviction.random (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/random/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/random/package-summary.html
index 45ec584..c387189 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/random/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/random/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/random/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.eviction.random (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/random/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/random/package-tree.html
index 9b44929..618f416 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/random/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/random/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/random/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.eviction.random Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/random/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/random/package-use.html
index 4a6e932..f2f5d3c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/random/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/random/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/random/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.cache.eviction.random (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/SortedEvictionPolicy.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/SortedEvictionPolicy.html
index 7f893b7..e71b724 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/SortedEvictionPolicy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/SortedEvictionPolicy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/sorted/SortedEvictionPolicy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SortedEvictionPolicy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/SortedEvictionPolicyFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/SortedEvictionPolicyFactory.html
index 9b73d32..2ee18fd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/SortedEvictionPolicyFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/SortedEvictionPolicyFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/sorted/SortedEvictionPolicyFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SortedEvictionPolicyFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/SortedEvictionPolicyMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/SortedEvictionPolicyMBean.html
index 8b76797..47ec8bb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/SortedEvictionPolicyMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/SortedEvictionPolicyMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/sorted/SortedEvictionPolicyMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SortedEvictionPolicyMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/class-use/SortedEvictionPolicy.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/class-use/SortedEvictionPolicy.html
index 248f84a..d42b6b7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/class-use/SortedEvictionPolicy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/class-use/SortedEvictionPolicy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/sorted/class-use/SortedEvictionPolicy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.eviction.sorted.SortedEvictionPolicy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/class-use/SortedEvictionPolicyFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/class-use/SortedEvictionPolicyFactory.html
index 6bb8cd5..6d8efc2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/class-use/SortedEvictionPolicyFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/class-use/SortedEvictionPolicyFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/sorted/class-use/SortedEvictionPolicyFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.eviction.sorted.SortedEvictionPolicyFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/class-use/SortedEvictionPolicyMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/class-use/SortedEvictionPolicyMBean.html
index d7b0f2b..80e55be 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/class-use/SortedEvictionPolicyMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/class-use/SortedEvictionPolicyMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/sorted/class-use/SortedEvictionPolicyMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.eviction.sorted.SortedEvictionPolicyMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/package-frame.html
index 2c52af9..5970aad 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/sorted/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.eviction.sorted (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/package-summary.html
index cadb9ad..9d77d43 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/sorted/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.eviction.sorted (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/package-tree.html
index fc3433d..43629bb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/sorted/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.eviction.sorted Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/package-use.html
index 9be80da..1ce0d84 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/eviction/sorted/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/eviction/sorted/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.cache.eviction.sorted (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateAccessStrategyAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateAccessStrategyAdapter.html
index fbea513..432d15d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateAccessStrategyAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateAccessStrategyAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/hibernate/HibernateAccessStrategyAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>HibernateAccessStrategyAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateAccessStrategyFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateAccessStrategyFactory.html
index 5eb7530..a05af48 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateAccessStrategyFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateAccessStrategyFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/hibernate/HibernateAccessStrategyFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>HibernateAccessStrategyFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateCacheProxy.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateCacheProxy.html
index 3392284..a0b2db6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateCacheProxy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateCacheProxy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/hibernate/HibernateCacheProxy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>HibernateCacheProxy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateExceptionConverter.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateExceptionConverter.html
index cf5e1cc..7ef88d4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateExceptionConverter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateExceptionConverter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/hibernate/HibernateExceptionConverter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>HibernateExceptionConverter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateKeyTransformer.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateKeyTransformer.html
index ceb275b..bb0a160 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateKeyTransformer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateKeyTransformer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/hibernate/HibernateKeyTransformer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>HibernateKeyTransformer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateNonStrictAccessStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateNonStrictAccessStrategy.html
index 0c40372..a4c00f4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateNonStrictAccessStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateNonStrictAccessStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/hibernate/HibernateNonStrictAccessStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>HibernateNonStrictAccessStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateReadOnlyAccessStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateReadOnlyAccessStrategy.html
index 289d746..83046bf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateReadOnlyAccessStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateReadOnlyAccessStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/hibernate/HibernateReadOnlyAccessStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>HibernateReadOnlyAccessStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateReadWriteAccessStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateReadWriteAccessStrategy.html
index 364d768..8e6644c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateReadWriteAccessStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateReadWriteAccessStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/hibernate/HibernateReadWriteAccessStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>HibernateReadWriteAccessStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateTransactionalAccessStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateTransactionalAccessStrategy.html
index c713ab4..6809515 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateTransactionalAccessStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/HibernateTransactionalAccessStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/hibernate/HibernateTransactionalAccessStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>HibernateTransactionalAccessStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateAccessStrategyAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateAccessStrategyAdapter.html
index 4bef5ad..737454a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateAccessStrategyAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateAccessStrategyAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateAccessStrategyAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.hibernate.HibernateAccessStrategyAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateAccessStrategyFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateAccessStrategyFactory.html
index 243a4f1..c102e34 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateAccessStrategyFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateAccessStrategyFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateAccessStrategyFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.hibernate.HibernateAccessStrategyFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateCacheProxy.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateCacheProxy.html
index 7f57fbd..6dfc50c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateCacheProxy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateCacheProxy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateCacheProxy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.hibernate.HibernateCacheProxy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateExceptionConverter.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateExceptionConverter.html
index 028f67a..9a9f128 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateExceptionConverter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateExceptionConverter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateExceptionConverter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.hibernate.HibernateExceptionConverter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateKeyTransformer.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateKeyTransformer.html
index 59ba306..64f508b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateKeyTransformer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateKeyTransformer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateKeyTransformer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.hibernate.HibernateKeyTransformer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateNonStrictAccessStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateNonStrictAccessStrategy.html
index 8850b8d..318c55c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateNonStrictAccessStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateNonStrictAccessStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateNonStrictAccessStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.hibernate.HibernateNonStrictAccessStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateReadOnlyAccessStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateReadOnlyAccessStrategy.html
index d7682f2..38afc36 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateReadOnlyAccessStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateReadOnlyAccessStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateReadOnlyAccessStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.hibernate.HibernateReadOnlyAccessStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateReadWriteAccessStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateReadWriteAccessStrategy.html
index 90b23a9..340038c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateReadWriteAccessStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateReadWriteAccessStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateReadWriteAccessStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.hibernate.HibernateReadWriteAccessStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateTransactionalAccessStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateTransactionalAccessStrategy.html
index 116e078..f03a041 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateTransactionalAccessStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateTransactionalAccessStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/hibernate/class-use/HibernateTransactionalAccessStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.hibernate.HibernateTransactionalAccessStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/package-frame.html
index bdbe4a8..3caf546 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/hibernate/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.hibernate (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/package-summary.html
index ad7ad5c..fdaac70 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/hibernate/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.hibernate (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/package-tree.html
index 0c1361b..f70e262 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/hibernate/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.hibernate Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/package-use.html
index c5e9c1c..443adfa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/hibernate/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/hibernate/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.cache.hibernate (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/CacheTmLookup.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/CacheTmLookup.html
index 9fb4f86..06df43c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/CacheTmLookup.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/CacheTmLookup.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/jta/CacheTmLookup.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheTmLookup (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/class-use/CacheTmLookup.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/class-use/CacheTmLookup.html
index d3c9b11..1aecd44 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/class-use/CacheTmLookup.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/class-use/CacheTmLookup.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/jta/class-use/CacheTmLookup.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.jta.CacheTmLookup (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/jndi/CacheJndiTmFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/jndi/CacheJndiTmFactory.html
index 880f9c3..81989f7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/jndi/CacheJndiTmFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/jndi/CacheJndiTmFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/jta/jndi/CacheJndiTmFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheJndiTmFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/jndi/CacheJndiTmLookup.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/jndi/CacheJndiTmLookup.html
index b29a293..42f9e8e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/jndi/CacheJndiTmLookup.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/jndi/CacheJndiTmLookup.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/jta/jndi/CacheJndiTmLookup.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheJndiTmLookup (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/jndi/class-use/CacheJndiTmFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/jndi/class-use/CacheJndiTmFactory.html
index 26c85bf..7b281a2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/jndi/class-use/CacheJndiTmFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/jndi/class-use/CacheJndiTmFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/jta/jndi/class-use/CacheJndiTmFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.jta.jndi.CacheJndiTmFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/jndi/class-use/CacheJndiTmLookup.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/jndi/class-use/CacheJndiTmLookup.html
index 2d25b70..23bec14 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/jndi/class-use/CacheJndiTmLookup.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/jndi/class-use/CacheJndiTmLookup.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/jta/jndi/class-use/CacheJndiTmLookup.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.jta.jndi.CacheJndiTmLookup (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/jndi/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/jndi/package-frame.html
index 0900631..6ffadea 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/jndi/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/jndi/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/jta/jndi/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.jta.jndi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/jndi/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/jndi/package-summary.html
index 10bd018..6cbf8c0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/jndi/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/jndi/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/jta/jndi/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.jta.jndi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/jndi/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/jndi/package-tree.html
index 326e4f1..ee97411 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/jndi/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/jndi/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/jta/jndi/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.jta.jndi Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/jndi/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/jndi/package-use.html
index 2cd05da..17b25b6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/jndi/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/jndi/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/jta/jndi/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.cache.jta.jndi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/package-frame.html
index c6579c0..4aa56a6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/jta/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.jta (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/package-summary.html
index 50e0bf3..1c8eb5f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/jta/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.jta (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/package-tree.html
index ee64c6c..5a71b09 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/jta/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.jta Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/package-use.html
index 3b639f0..88e1f08 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/jta/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.cache.jta (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/reflect/CacheReflectionTmLookup.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/reflect/CacheReflectionTmLookup.html
index d04bcc1..2259aaf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/reflect/CacheReflectionTmLookup.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/reflect/CacheReflectionTmLookup.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/jta/reflect/CacheReflectionTmLookup.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheReflectionTmLookup (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/reflect/class-use/CacheReflectionTmLookup.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/reflect/class-use/CacheReflectionTmLookup.html
index 69735b1..d24ffd9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/reflect/class-use/CacheReflectionTmLookup.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/reflect/class-use/CacheReflectionTmLookup.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/jta/reflect/class-use/CacheReflectionTmLookup.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.jta.reflect.CacheReflectionTmLookup (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/reflect/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/reflect/package-frame.html
index d0755bb..c0bd39a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/reflect/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/reflect/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/jta/reflect/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.jta.reflect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/reflect/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/reflect/package-summary.html
index 04a2365..c9dca48 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/reflect/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/reflect/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/jta/reflect/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.jta.reflect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/reflect/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/reflect/package-tree.html
index 920bc8c..a469e04 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/reflect/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/reflect/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/jta/reflect/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.jta.reflect Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/reflect/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/reflect/package-use.html
index 3228673..8feda07 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/reflect/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/reflect/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/jta/reflect/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.cache.jta.reflect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/websphere/WebSphereLibertyTmFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/websphere/WebSphereLibertyTmFactory.html
index f2f8154..7827719 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/websphere/WebSphereLibertyTmFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/websphere/WebSphereLibertyTmFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/jta/websphere/WebSphereLibertyTmFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>WebSphereLibertyTmFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/websphere/WebSphereTmFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/websphere/WebSphereTmFactory.html
index 37b1642..f80e29f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/websphere/WebSphereTmFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/websphere/WebSphereTmFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/jta/websphere/WebSphereTmFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>WebSphereTmFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/websphere/class-use/WebSphereLibertyTmFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/websphere/class-use/WebSphereLibertyTmFactory.html
index 766ced1..a66c6b0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/websphere/class-use/WebSphereLibertyTmFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/websphere/class-use/WebSphereLibertyTmFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/jta/websphere/class-use/WebSphereLibertyTmFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.jta.websphere.WebSphereLibertyTmFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/websphere/class-use/WebSphereTmFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/websphere/class-use/WebSphereTmFactory.html
index 2538a6c..ef902cc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/websphere/class-use/WebSphereTmFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/websphere/class-use/WebSphereTmFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/jta/websphere/class-use/WebSphereTmFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.jta.websphere.WebSphereTmFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/websphere/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/websphere/package-frame.html
index d08d9bc..734d7f9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/websphere/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/websphere/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/jta/websphere/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.jta.websphere (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/websphere/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/websphere/package-summary.html
index 2baa710..6ae5620 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/websphere/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/websphere/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/jta/websphere/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.jta.websphere (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/websphere/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/websphere/package-tree.html
index 382b088..67ec66e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/websphere/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/websphere/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/jta/websphere/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.jta.websphere Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/websphere/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/websphere/package-use.html
index b6f21a2..1e5bae3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/websphere/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/jta/websphere/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/jta/websphere/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.cache.jta.websphere (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/package-frame.html
index a4ae864..54953b2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/package-summary.html
index 81c8d39..de1aad8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/package-tree.html
index 24eae28..ce21778 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/package-use.html
index f8561be..e08e22c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.cache (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/AbstractContinuousQuery.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/AbstractContinuousQuery.html
index 96dcfd7..b6dfe6c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/AbstractContinuousQuery.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/AbstractContinuousQuery.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/AbstractContinuousQuery.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>AbstractContinuousQuery (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/BulkLoadContextCursor.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/BulkLoadContextCursor.html
index 47ca6d3..b3c3729 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/BulkLoadContextCursor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/BulkLoadContextCursor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/BulkLoadContextCursor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BulkLoadContextCursor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/CacheQueryEntryEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/CacheQueryEntryEvent.html
index e5d64cd..20c53bb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/CacheQueryEntryEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/CacheQueryEntryEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/CacheQueryEntryEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheQueryEntryEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/ContinuousQuery.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/ContinuousQuery.html
index 3dbef09..bfcf6e3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/ContinuousQuery.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/ContinuousQuery.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/ContinuousQuery.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ContinuousQuery (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/ContinuousQueryWithTransformer.EventListener.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/ContinuousQueryWithTransformer.EventListener.html
index ebfdf1e..f747fdc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/ContinuousQueryWithTransformer.EventListener.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/ContinuousQueryWithTransformer.EventListener.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/ContinuousQueryWithTransformer.EventListener.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ContinuousQueryWithTransformer.EventListener (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/ContinuousQueryWithTransformer.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/ContinuousQueryWithTransformer.html
index cef7f59..6fa965e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/ContinuousQueryWithTransformer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/ContinuousQueryWithTransformer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/ContinuousQueryWithTransformer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ContinuousQueryWithTransformer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/FieldsQueryCursor.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/FieldsQueryCursor.html
index bcade6b..e757093 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/FieldsQueryCursor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/FieldsQueryCursor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/FieldsQueryCursor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>FieldsQueryCursor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/Query.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/Query.html
index 848c0c2..0e0b25b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/Query.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/Query.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/Query.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Query (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/QueryCancelledException.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/QueryCancelledException.html
index 19e7539..d44f556 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/QueryCancelledException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/QueryCancelledException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/QueryCancelledException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>QueryCancelledException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/QueryCursor.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/QueryCursor.html
index 7fa80ce..3a10721 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/QueryCursor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/QueryCursor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/QueryCursor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>QueryCursor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/QueryDetailMetrics.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/QueryDetailMetrics.html
index c286e69..7a35c13 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/QueryDetailMetrics.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/QueryDetailMetrics.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/QueryDetailMetrics.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>QueryDetailMetrics (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/QueryMetrics.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/QueryMetrics.html
index 332b28e..ed92935 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/QueryMetrics.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/QueryMetrics.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/QueryMetrics.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>QueryMetrics (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/QueryRetryException.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/QueryRetryException.html
index de82e6f..c5acfb0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/QueryRetryException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/QueryRetryException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/QueryRetryException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>QueryRetryException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/ScanQuery.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/ScanQuery.html
index 03780b5..95fec43 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/ScanQuery.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/ScanQuery.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/ScanQuery.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ScanQuery (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/SpiQuery.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/SpiQuery.html
index b8dbaa1..cb73335 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/SpiQuery.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/SpiQuery.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/SpiQuery.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SpiQuery (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/SqlFieldsQuery.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/SqlFieldsQuery.html
index 713d0cd..99c4873 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/SqlFieldsQuery.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/SqlFieldsQuery.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/SqlFieldsQuery.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SqlFieldsQuery (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/SqlQuery.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/SqlQuery.html
index 257395c..bd1d6ce 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/SqlQuery.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/SqlQuery.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/SqlQuery.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SqlQuery (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/TextQuery.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/TextQuery.html
index 4e96c01..d2ec557 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/TextQuery.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/TextQuery.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/TextQuery.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TextQuery (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/QueryGroupIndex.List.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/QueryGroupIndex.List.html
index 645c4e8..c36db25 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/QueryGroupIndex.List.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/QueryGroupIndex.List.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/annotations/QueryGroupIndex.List.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>QueryGroupIndex.List (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/QueryGroupIndex.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/QueryGroupIndex.html
index 9cc06c3..4dddbb2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/QueryGroupIndex.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/QueryGroupIndex.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/annotations/QueryGroupIndex.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>QueryGroupIndex (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/QuerySqlField.Group.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/QuerySqlField.Group.html
index caf4109..249b661 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/QuerySqlField.Group.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/QuerySqlField.Group.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/annotations/QuerySqlField.Group.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>QuerySqlField.Group (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/QuerySqlField.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/QuerySqlField.html
index 3d63007..11e8f9e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/QuerySqlField.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/QuerySqlField.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/annotations/QuerySqlField.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>QuerySqlField (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/QuerySqlFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/QuerySqlFunction.html
index 22de805..bacaaa6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/QuerySqlFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/QuerySqlFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/annotations/QuerySqlFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>QuerySqlFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/QueryTextField.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/QueryTextField.html
index a7d1dfa..31eb519 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/QueryTextField.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/QueryTextField.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/annotations/QueryTextField.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>QueryTextField (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/class-use/QueryGroupIndex.List.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/class-use/QueryGroupIndex.List.html
index d60b0c5..3af7605 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/class-use/QueryGroupIndex.List.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/class-use/QueryGroupIndex.List.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/annotations/class-use/QueryGroupIndex.List.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.query.annotations.QueryGroupIndex.List (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/class-use/QueryGroupIndex.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/class-use/QueryGroupIndex.html
index 9f07051..e3effa5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/class-use/QueryGroupIndex.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/class-use/QueryGroupIndex.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/annotations/class-use/QueryGroupIndex.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.query.annotations.QueryGroupIndex (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/class-use/QuerySqlField.Group.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/class-use/QuerySqlField.Group.html
index a149651..97f8bb8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/class-use/QuerySqlField.Group.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/class-use/QuerySqlField.Group.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/annotations/class-use/QuerySqlField.Group.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.query.annotations.QuerySqlField.Group (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/class-use/QuerySqlField.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/class-use/QuerySqlField.html
index ce84be7..8f100f8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/class-use/QuerySqlField.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/class-use/QuerySqlField.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/annotations/class-use/QuerySqlField.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.query.annotations.QuerySqlField (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/class-use/QuerySqlFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/class-use/QuerySqlFunction.html
index 201bc3b..4358ad1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/class-use/QuerySqlFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/class-use/QuerySqlFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/annotations/class-use/QuerySqlFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.query.annotations.QuerySqlFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/class-use/QueryTextField.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/class-use/QueryTextField.html
index 4351041..954fa73 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/class-use/QueryTextField.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/class-use/QueryTextField.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/annotations/class-use/QueryTextField.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.query.annotations.QueryTextField (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/package-frame.html
index d5bdbaa..8dbd865 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/annotations/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.query.annotations (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/package-summary.html
index c43703f..d928ea7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/annotations/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.query.annotations (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/package-tree.html
index f2d6486..51ae4cb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/annotations/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.query.annotations Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/package-use.html
index 779ef17..de10e18 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/annotations/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/annotations/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.cache.query.annotations (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/AbstractContinuousQuery.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/AbstractContinuousQuery.html
index ebd4575..ddd5d58 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/AbstractContinuousQuery.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/AbstractContinuousQuery.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/class-use/AbstractContinuousQuery.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.query.AbstractContinuousQuery (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/BulkLoadContextCursor.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/BulkLoadContextCursor.html
index 9673e9f..707c51d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/BulkLoadContextCursor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/BulkLoadContextCursor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/class-use/BulkLoadContextCursor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.query.BulkLoadContextCursor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/CacheQueryEntryEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/CacheQueryEntryEvent.html
index d534c02..91d888d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/CacheQueryEntryEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/CacheQueryEntryEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/class-use/CacheQueryEntryEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.query.CacheQueryEntryEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/ContinuousQuery.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/ContinuousQuery.html
index 79b743b..27f635b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/ContinuousQuery.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/ContinuousQuery.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/class-use/ContinuousQuery.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.query.ContinuousQuery (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/ContinuousQueryWithTransformer.EventListener.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/ContinuousQueryWithTransformer.EventListener.html
index 19a9354..68a6cbb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/ContinuousQueryWithTransformer.EventListener.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/ContinuousQueryWithTransformer.EventListener.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/class-use/ContinuousQueryWithTransformer.EventListener.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.query.ContinuousQueryWithTransformer.EventListener (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/ContinuousQueryWithTransformer.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/ContinuousQueryWithTransformer.html
index 7af14ed..13ec525 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/ContinuousQueryWithTransformer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/ContinuousQueryWithTransformer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/class-use/ContinuousQueryWithTransformer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.query.ContinuousQueryWithTransformer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/FieldsQueryCursor.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/FieldsQueryCursor.html
index 288cf77..78984c7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/FieldsQueryCursor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/FieldsQueryCursor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/class-use/FieldsQueryCursor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.query.FieldsQueryCursor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/Query.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/Query.html
index 7581d8f..93267df 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/Query.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/Query.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/class-use/Query.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.query.Query (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/QueryCancelledException.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/QueryCancelledException.html
index 3daf643..80f511a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/QueryCancelledException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/QueryCancelledException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/class-use/QueryCancelledException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.query.QueryCancelledException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/QueryCursor.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/QueryCursor.html
index 4b4bb53..4b521a7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/QueryCursor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/QueryCursor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/class-use/QueryCursor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.query.QueryCursor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/QueryDetailMetrics.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/QueryDetailMetrics.html
index a956dba..ce7754f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/QueryDetailMetrics.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/QueryDetailMetrics.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/class-use/QueryDetailMetrics.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.query.QueryDetailMetrics (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/QueryMetrics.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/QueryMetrics.html
index d5871ff..fd857e2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/QueryMetrics.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/QueryMetrics.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/class-use/QueryMetrics.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.query.QueryMetrics (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/QueryRetryException.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/QueryRetryException.html
index 0706335..e6cf029 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/QueryRetryException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/QueryRetryException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/class-use/QueryRetryException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.query.QueryRetryException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/ScanQuery.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/ScanQuery.html
index 192bf77..65e5bac 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/ScanQuery.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/ScanQuery.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/class-use/ScanQuery.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.query.ScanQuery (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/SpiQuery.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/SpiQuery.html
index 6e7d1d6..3fbd280 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/SpiQuery.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/SpiQuery.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/class-use/SpiQuery.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.query.SpiQuery (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/SqlFieldsQuery.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/SqlFieldsQuery.html
index ff7a15c..aa27998 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/SqlFieldsQuery.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/SqlFieldsQuery.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/class-use/SqlFieldsQuery.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.query.SqlFieldsQuery (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/SqlQuery.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/SqlQuery.html
index f616415..1c1ee9a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/SqlQuery.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/SqlQuery.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/class-use/SqlQuery.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.query.SqlQuery (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/TextQuery.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/TextQuery.html
index 8d06742..b2dcbb4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/TextQuery.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/class-use/TextQuery.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/class-use/TextQuery.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.query.TextQuery (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/package-frame.html
index c60bb16..b599a76 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.query (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/package-summary.html
index c061597..d9fbd86 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.query (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/package-tree.html
index b390486..90b6445 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.query Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/package-use.html
index f49ca8a..a3ae61d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/query/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/query/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.cache.query (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/spring/SpringCacheManager.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/spring/SpringCacheManager.html
index 8eb209d..ddcb08d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/spring/SpringCacheManager.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/spring/SpringCacheManager.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/spring/SpringCacheManager.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SpringCacheManager (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/spring/class-use/SpringCacheManager.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/spring/class-use/SpringCacheManager.html
index befbd98..ee11cad 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/spring/class-use/SpringCacheManager.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/spring/class-use/SpringCacheManager.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/spring/class-use/SpringCacheManager.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.spring.SpringCacheManager (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/spring/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/spring/package-frame.html
index 16774da..c222b84 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/spring/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/spring/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/spring/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.spring (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/spring/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/spring/package-summary.html
index 5dc0211..08dc125 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/spring/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/spring/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/spring/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.spring (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/spring/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/spring/package-tree.html
index cc05730..942d31e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/spring/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/spring/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/spring/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.spring Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/spring/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/spring/package-use.html
index 648f920..19aea3f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/spring/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/spring/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/spring/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.cache.spring (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/CacheLoadOnlyStoreAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/CacheLoadOnlyStoreAdapter.html
index 057e22f..dc87892 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/CacheLoadOnlyStoreAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/CacheLoadOnlyStoreAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/CacheLoadOnlyStoreAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheLoadOnlyStoreAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/CacheStore.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/CacheStore.html
index 5ec2ce0..deb3ea5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/CacheStore.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/CacheStore.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/CacheStore.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheStore (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/CacheStoreAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/CacheStoreAdapter.html
index 2d0bae2..c5f7ecb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/CacheStoreAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/CacheStoreAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/CacheStoreAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheStoreAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/CacheStoreSession.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/CacheStoreSession.html
index 9c26512..16b89ee 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/CacheStoreSession.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/CacheStoreSession.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/CacheStoreSession.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheStoreSession (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/CacheStoreSessionListener.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/CacheStoreSessionListener.html
index 575736a..33a018b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/CacheStoreSessionListener.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/CacheStoreSessionListener.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/CacheStoreSessionListener.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheStoreSessionListener (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/CassandraCacheStore.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/CassandraCacheStore.html
index 8f431e2..19699ec 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/CassandraCacheStore.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/CassandraCacheStore.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/CassandraCacheStore.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CassandraCacheStore (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/CassandraCacheStoreFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/CassandraCacheStoreFactory.html
index 8a3fa02..65d9402 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/CassandraCacheStoreFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/CassandraCacheStoreFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/CassandraCacheStoreFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CassandraCacheStoreFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/class-use/CassandraCacheStore.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/class-use/CassandraCacheStore.html
index 263d799..b11fce3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/class-use/CassandraCacheStore.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/class-use/CassandraCacheStore.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/class-use/CassandraCacheStore.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.cassandra.CassandraCacheStore (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/class-use/CassandraCacheStoreFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/class-use/CassandraCacheStoreFactory.html
index 4b72298..df4db55 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/class-use/CassandraCacheStoreFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/class-use/CassandraCacheStoreFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/class-use/CassandraCacheStoreFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.cassandra.CassandraCacheStoreFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/CassandraHelper.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/CassandraHelper.html
index 6682199..6572e93 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/CassandraHelper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/CassandraHelper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/common/CassandraHelper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CassandraHelper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/PropertyMappingHelper.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/PropertyMappingHelper.html
index d390ed2..cf36e33 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/PropertyMappingHelper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/PropertyMappingHelper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/common/PropertyMappingHelper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PropertyMappingHelper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/RandomSleeper.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/RandomSleeper.html
index 32d3d91..fcf3c80 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/RandomSleeper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/RandomSleeper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/common/RandomSleeper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>RandomSleeper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/SystemHelper.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/SystemHelper.html
index 2c99b1d..fceb837 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/SystemHelper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/SystemHelper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/common/SystemHelper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SystemHelper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/class-use/CassandraHelper.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/class-use/CassandraHelper.html
index 50a64f5..efcfe86 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/class-use/CassandraHelper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/class-use/CassandraHelper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/common/class-use/CassandraHelper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.cassandra.common.CassandraHelper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/class-use/PropertyMappingHelper.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/class-use/PropertyMappingHelper.html
index aa3b8cc..de91672 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/class-use/PropertyMappingHelper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/class-use/PropertyMappingHelper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/common/class-use/PropertyMappingHelper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.cassandra.common.PropertyMappingHelper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/class-use/RandomSleeper.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/class-use/RandomSleeper.html
index 55de073..38d5c78 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/class-use/RandomSleeper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/class-use/RandomSleeper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/common/class-use/RandomSleeper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.cassandra.common.RandomSleeper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/class-use/SystemHelper.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/class-use/SystemHelper.html
index 1539e03..78bd0f1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/class-use/SystemHelper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/class-use/SystemHelper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/common/class-use/SystemHelper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.cassandra.common.SystemHelper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/package-frame.html
index adcfacc..f39c953 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/common/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.cassandra.common (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/package-summary.html
index 097414a..f34244a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/common/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.cassandra.common (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/package-tree.html
index d705826..ae0766f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/common/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.cassandra.common Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/package-use.html
index 77200e7..3affbf6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/common/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/common/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.cache.store.cassandra.common (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/Credentials.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/Credentials.html
index 7b429b6..75ec85b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/Credentials.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/Credentials.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/datasource/Credentials.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Credentials (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/DataSource.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/DataSource.html
index 03a8043..397737f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/DataSource.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/DataSource.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/datasource/DataSource.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DataSource (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/PlainCredentials.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/PlainCredentials.html
index e55069d..49eab49 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/PlainCredentials.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/PlainCredentials.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/datasource/PlainCredentials.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PlainCredentials (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/class-use/Credentials.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/class-use/Credentials.html
index 14d4178..5df4aec 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/class-use/Credentials.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/class-use/Credentials.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/datasource/class-use/Credentials.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.store.cassandra.datasource.Credentials (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/class-use/DataSource.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/class-use/DataSource.html
index 1aaedc4..60f30a3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/class-use/DataSource.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/class-use/DataSource.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/datasource/class-use/DataSource.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.cassandra.datasource.DataSource (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/class-use/PlainCredentials.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/class-use/PlainCredentials.html
index 06a5648..4d4d9c5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/class-use/PlainCredentials.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/class-use/PlainCredentials.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/datasource/class-use/PlainCredentials.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.cassandra.datasource.PlainCredentials (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/package-frame.html
index 7658ba8..df788ae 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/datasource/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.cassandra.datasource (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/package-summary.html
index d8e44f1..51b7fa5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/datasource/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.cassandra.datasource (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/package-tree.html
index dff050d..72759f4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/datasource/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.cassandra.datasource Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/package-use.html
index 57b97e2..758a302 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/datasource/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/datasource/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.cache.store.cassandra.datasource (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/package-frame.html
index 875edc5..c735c26 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.cassandra (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/package-summary.html
index 6ca4d56..a886a2e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.cassandra (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/package-tree.html
index ed8a3de..33c6850 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.cassandra Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/package-use.html
index 337274a..97b5410 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.cache.store.cassandra (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/KeyPersistenceSettings.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/KeyPersistenceSettings.html
index ce5805f..89eafc2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/KeyPersistenceSettings.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/KeyPersistenceSettings.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/persistence/KeyPersistenceSettings.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>KeyPersistenceSettings (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/KeyValuePersistenceSettings.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/KeyValuePersistenceSettings.html
index fc728a2..a85a1f3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/KeyValuePersistenceSettings.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/KeyValuePersistenceSettings.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/persistence/KeyValuePersistenceSettings.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>KeyValuePersistenceSettings (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PersistenceController.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PersistenceController.html
index 071d080..9bf05b8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PersistenceController.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PersistenceController.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PersistenceController.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PersistenceController (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PersistenceSettings.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PersistenceSettings.html
index 1229613..d451c31 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PersistenceSettings.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PersistenceSettings.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PersistenceSettings.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PersistenceSettings (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PersistenceStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PersistenceStrategy.html
index 398f45b..7f9b1b6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PersistenceStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PersistenceStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PersistenceStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PersistenceStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PojoField.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PojoField.html
index 4f5f5a6..d6f68f2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PojoField.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PojoField.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PojoField.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PojoField (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PojoFieldAccessor.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PojoFieldAccessor.html
index 702fb61..da1c607 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PojoFieldAccessor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PojoFieldAccessor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PojoFieldAccessor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PojoFieldAccessor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PojoKeyField.SortOrder.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PojoKeyField.SortOrder.html
index d87bbe3..7d43f01 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PojoKeyField.SortOrder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PojoKeyField.SortOrder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PojoKeyField.SortOrder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PojoKeyField.SortOrder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PojoKeyField.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PojoKeyField.html
index 824b1c9..badb05a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PojoKeyField.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PojoKeyField.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PojoKeyField.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PojoKeyField (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PojoValueField.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PojoValueField.html
index b3acfc5..d385720 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PojoValueField.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PojoValueField.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/persistence/PojoValueField.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PojoValueField (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/ValuePersistenceSettings.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/ValuePersistenceSettings.html
index e312b4d..0e243d8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/ValuePersistenceSettings.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/ValuePersistenceSettings.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/persistence/ValuePersistenceSettings.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ValuePersistenceSettings (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/KeyPersistenceSettings.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/KeyPersistenceSettings.html
index 93f2517..e9e4cdd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/KeyPersistenceSettings.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/KeyPersistenceSettings.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/KeyPersistenceSettings.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.cassandra.persistence.KeyPersistenceSettings (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/KeyValuePersistenceSettings.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/KeyValuePersistenceSettings.html
index 83d8d8c..35e9d02 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/KeyValuePersistenceSettings.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/KeyValuePersistenceSettings.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/KeyValuePersistenceSettings.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.cassandra.persistence.KeyValuePersistenceSettings (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PersistenceController.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PersistenceController.html
index 95fe826..1f628f8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PersistenceController.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PersistenceController.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PersistenceController.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.cassandra.persistence.PersistenceController (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PersistenceSettings.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PersistenceSettings.html
index 490efb3..315f28f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PersistenceSettings.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PersistenceSettings.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PersistenceSettings.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.cassandra.persistence.PersistenceSettings (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PersistenceStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PersistenceStrategy.html
index 8a1e404..a5cc664 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PersistenceStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PersistenceStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PersistenceStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.cassandra.persistence.PersistenceStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PojoField.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PojoField.html
index ccbdaef..4a89322 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PojoField.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PojoField.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PojoField.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.cassandra.persistence.PojoField (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PojoFieldAccessor.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PojoFieldAccessor.html
index b1e0888..014392c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PojoFieldAccessor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PojoFieldAccessor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PojoFieldAccessor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.cassandra.persistence.PojoFieldAccessor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PojoKeyField.SortOrder.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PojoKeyField.SortOrder.html
index c15d9d9..57d3bd6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PojoKeyField.SortOrder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PojoKeyField.SortOrder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PojoKeyField.SortOrder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.cassandra.persistence.PojoKeyField.SortOrder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PojoKeyField.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PojoKeyField.html
index 14f8470..1e7257c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PojoKeyField.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PojoKeyField.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PojoKeyField.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.cassandra.persistence.PojoKeyField (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PojoValueField.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PojoValueField.html
index 23e0e8f..d61a5de 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PojoValueField.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PojoValueField.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/PojoValueField.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.cassandra.persistence.PojoValueField (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/ValuePersistenceSettings.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/ValuePersistenceSettings.html
index 7df1b65..92f7882 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/ValuePersistenceSettings.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/ValuePersistenceSettings.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/persistence/class-use/ValuePersistenceSettings.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.cassandra.persistence.ValuePersistenceSettings (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/package-frame.html
index ac53746..0871d94 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/persistence/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.cassandra.persistence (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/package-summary.html
index 24d5e96..fb28239 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/persistence/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.cassandra.persistence (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/package-tree.html
index a78a7e5..878be1a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/persistence/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.cassandra.persistence Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/package-use.html
index 17f8e09..6cfe46b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/persistence/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/persistence/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.cache.store.cassandra.persistence (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/JavaSerializer.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/JavaSerializer.html
index e513e99..9367c57 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/JavaSerializer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/JavaSerializer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/serializer/JavaSerializer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>JavaSerializer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/KryoSerializer.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/KryoSerializer.html
index e5860d5..a148d77 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/KryoSerializer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/KryoSerializer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/serializer/KryoSerializer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>KryoSerializer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/Serializer.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/Serializer.html
index 7afe715..60b768b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/Serializer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/Serializer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/serializer/Serializer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Serializer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/class-use/JavaSerializer.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/class-use/JavaSerializer.html
index dec5f21..62d4151 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/class-use/JavaSerializer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/class-use/JavaSerializer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/serializer/class-use/JavaSerializer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.cassandra.serializer.JavaSerializer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/class-use/KryoSerializer.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/class-use/KryoSerializer.html
index ee03b8a..132585d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/class-use/KryoSerializer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/class-use/KryoSerializer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/serializer/class-use/KryoSerializer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.cassandra.serializer.KryoSerializer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/class-use/Serializer.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/class-use/Serializer.html
index 63f7403..4bebd70 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/class-use/Serializer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/class-use/Serializer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/serializer/class-use/Serializer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.store.cassandra.serializer.Serializer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/package-frame.html
index c069b8a..a87dca6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/serializer/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.cassandra.serializer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/package-summary.html
index 4d13519..fb371a7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/serializer/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.cassandra.serializer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/package-tree.html
index acc1e0f..f224696 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/serializer/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.cassandra.serializer Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/package-use.html
index 76f4e3a..d12db91 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/serializer/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/serializer/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.cache.store.cassandra.serializer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/BatchExecutionAssistant.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/BatchExecutionAssistant.html
index bf48914..3f0ebfd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/BatchExecutionAssistant.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/BatchExecutionAssistant.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/BatchExecutionAssistant.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BatchExecutionAssistant (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/BatchLoaderAssistant.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/BatchLoaderAssistant.html
index 2295072..3c31bcc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/BatchLoaderAssistant.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/BatchLoaderAssistant.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/BatchLoaderAssistant.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BatchLoaderAssistant (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/CassandraSession.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/CassandraSession.html
index 22f0a53..1b40878 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/CassandraSession.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/CassandraSession.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/CassandraSession.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CassandraSession (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/CassandraSessionImpl.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/CassandraSessionImpl.html
index 1b13d50..9f695b6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/CassandraSessionImpl.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/CassandraSessionImpl.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/CassandraSessionImpl.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CassandraSessionImpl (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/ExecutionAssistant.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/ExecutionAssistant.html
index 48190b6..8b2dd46 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/ExecutionAssistant.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/ExecutionAssistant.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/ExecutionAssistant.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ExecutionAssistant (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/GenericBatchExecutionAssistant.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/GenericBatchExecutionAssistant.html
index 4ddd637..36eafc8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/GenericBatchExecutionAssistant.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/GenericBatchExecutionAssistant.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/GenericBatchExecutionAssistant.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GenericBatchExecutionAssistant (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/LoadCacheCustomQueryWorker.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/LoadCacheCustomQueryWorker.html
index f92ffae..fd8d8b5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/LoadCacheCustomQueryWorker.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/LoadCacheCustomQueryWorker.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/LoadCacheCustomQueryWorker.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LoadCacheCustomQueryWorker (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/WrappedPreparedStatement.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/WrappedPreparedStatement.html
index 365aa0d..b585374 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/WrappedPreparedStatement.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/WrappedPreparedStatement.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/WrappedPreparedStatement.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>WrappedPreparedStatement (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/WrappedSession.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/WrappedSession.html
index 79ce626..7caf3d7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/WrappedSession.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/WrappedSession.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/WrappedSession.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>WrappedSession (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/BatchExecutionAssistant.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/BatchExecutionAssistant.html
index d0be316..8a9ebab 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/BatchExecutionAssistant.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/BatchExecutionAssistant.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/BatchExecutionAssistant.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.store.cassandra.session.BatchExecutionAssistant (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/BatchLoaderAssistant.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/BatchLoaderAssistant.html
index ace3b24..20c945d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/BatchLoaderAssistant.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/BatchLoaderAssistant.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/BatchLoaderAssistant.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.store.cassandra.session.BatchLoaderAssistant (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/CassandraSession.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/CassandraSession.html
index 85762c1..28ed5da 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/CassandraSession.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/CassandraSession.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/CassandraSession.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.store.cassandra.session.CassandraSession (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/CassandraSessionImpl.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/CassandraSessionImpl.html
index 65baaba..6ad1c0e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/CassandraSessionImpl.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/CassandraSessionImpl.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/CassandraSessionImpl.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.cassandra.session.CassandraSessionImpl (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/ExecutionAssistant.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/ExecutionAssistant.html
index c4cc7f3..9c261e9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/ExecutionAssistant.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/ExecutionAssistant.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/ExecutionAssistant.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.store.cassandra.session.ExecutionAssistant (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/GenericBatchExecutionAssistant.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/GenericBatchExecutionAssistant.html
index de3abd4..035a8a5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/GenericBatchExecutionAssistant.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/GenericBatchExecutionAssistant.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/GenericBatchExecutionAssistant.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.cassandra.session.GenericBatchExecutionAssistant (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/LoadCacheCustomQueryWorker.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/LoadCacheCustomQueryWorker.html
index 28f533e..3c7db90 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/LoadCacheCustomQueryWorker.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/LoadCacheCustomQueryWorker.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/LoadCacheCustomQueryWorker.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.cassandra.session.LoadCacheCustomQueryWorker (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/WrappedPreparedStatement.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/WrappedPreparedStatement.html
index dce36d8..1a88b92 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/WrappedPreparedStatement.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/WrappedPreparedStatement.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/WrappedPreparedStatement.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.cassandra.session.WrappedPreparedStatement (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/WrappedSession.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/WrappedSession.html
index 80a1fe6..cd8c2ed 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/WrappedSession.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/WrappedSession.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/class-use/WrappedSession.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.cassandra.session.WrappedSession (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/package-frame.html
index 7194287..8b30f6a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.cassandra.session (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/package-summary.html
index 3410cd6..0307647 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.cassandra.session (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/package-tree.html
index d32ba90..e1d4ee1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.cassandra.session Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/package-use.html
index 863c810..6cc7bc6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.cache.store.cassandra.session (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/IdleSession.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/IdleSession.html
index 0c3731c..3837d9a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/IdleSession.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/IdleSession.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/IdleSession.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IdleSession (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/SessionPool.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/SessionPool.html
index 952c1fe..895aa39 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/SessionPool.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/SessionPool.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/SessionPool.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SessionPool (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/class-use/IdleSession.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/class-use/IdleSession.html
index 5a86c4d..64b27ac 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/class-use/IdleSession.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/class-use/IdleSession.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/class-use/IdleSession.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.cassandra.session.pool.IdleSession (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/class-use/SessionPool.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/class-use/SessionPool.html
index f7c807b..136f707 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/class-use/SessionPool.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/class-use/SessionPool.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/class-use/SessionPool.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.cassandra.session.pool.SessionPool (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/package-frame.html
index 5f7837c..24c63db 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.cassandra.session.pool (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/package-summary.html
index 3d18242..a94d440 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.cassandra.session.pool (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/package-tree.html
index df551fe..1f98b08 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.cassandra.session.pool Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/package-use.html
index 1299a02..bbc4188 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/pool/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.cache.store.cassandra.session.pool (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/BaseMutation.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/BaseMutation.html
index 3e70d71..37cc5f0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/BaseMutation.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/BaseMutation.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/BaseMutation.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BaseMutation (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/DeleteMutation.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/DeleteMutation.html
index a5c8565..a31dff0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/DeleteMutation.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/DeleteMutation.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/DeleteMutation.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DeleteMutation (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/Mutation.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/Mutation.html
index 6f36434..773245c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/Mutation.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/Mutation.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/Mutation.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Mutation (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/WriteMutation.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/WriteMutation.html
index e685108..cbcd9f0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/WriteMutation.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/WriteMutation.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/WriteMutation.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>WriteMutation (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/class-use/BaseMutation.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/class-use/BaseMutation.html
index c829fd6..f765742 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/class-use/BaseMutation.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/class-use/BaseMutation.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/class-use/BaseMutation.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.cassandra.session.transaction.BaseMutation (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/class-use/DeleteMutation.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/class-use/DeleteMutation.html
index 9ce73e5..89c2a68 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/class-use/DeleteMutation.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/class-use/DeleteMutation.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/class-use/DeleteMutation.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.cassandra.session.transaction.DeleteMutation (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/class-use/Mutation.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/class-use/Mutation.html
index b4a7779..4b0aa06 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/class-use/Mutation.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/class-use/Mutation.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/class-use/Mutation.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.store.cassandra.session.transaction.Mutation (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/class-use/WriteMutation.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/class-use/WriteMutation.html
index acaa827..e39543b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/class-use/WriteMutation.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/class-use/WriteMutation.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/class-use/WriteMutation.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.cassandra.session.transaction.WriteMutation (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/package-frame.html
index d6f80b7..d7f96ea 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.cassandra.session.transaction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/package-summary.html
index ac273ad..b68568d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.cassandra.session.transaction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/package-tree.html
index 6ac7036..e60c585 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.cassandra.session.transaction Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/package-use.html
index fe8a9de..db21a89 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/session/transaction/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.cache.store.cassandra.session.transaction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/utils/DDLGenerator.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/utils/DDLGenerator.html
index 1306526..7402b36 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/utils/DDLGenerator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/utils/DDLGenerator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/utils/DDLGenerator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DDLGenerator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/utils/class-use/DDLGenerator.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/utils/class-use/DDLGenerator.html
index 659d2d3..c7d8945 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/utils/class-use/DDLGenerator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/utils/class-use/DDLGenerator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/utils/class-use/DDLGenerator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.cassandra.utils.DDLGenerator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/utils/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/utils/package-frame.html
index f08e23f..6da7b8f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/utils/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/utils/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/utils/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.cassandra.utils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/utils/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/utils/package-summary.html
index eef6af4..42c3b0e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/utils/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/utils/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/utils/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.cassandra.utils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/utils/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/utils/package-tree.html
index 84e0734..1fae06f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/utils/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/utils/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/utils/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.cassandra.utils Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/utils/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/utils/package-use.html
index 52affe7..224dc65 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/utils/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/cassandra/utils/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/cassandra/utils/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.cache.store.cassandra.utils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/class-use/CacheLoadOnlyStoreAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/class-use/CacheLoadOnlyStoreAdapter.html
index e6b825f..1286ab3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/class-use/CacheLoadOnlyStoreAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/class-use/CacheLoadOnlyStoreAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/class-use/CacheLoadOnlyStoreAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.CacheLoadOnlyStoreAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/class-use/CacheStore.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/class-use/CacheStore.html
index bca5b30..56015b0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/class-use/CacheStore.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/class-use/CacheStore.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/class-use/CacheStore.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.store.CacheStore (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/class-use/CacheStoreAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/class-use/CacheStoreAdapter.html
index 7ee7450..e7ba471 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/class-use/CacheStoreAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/class-use/CacheStoreAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/class-use/CacheStoreAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.CacheStoreAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/class-use/CacheStoreSession.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/class-use/CacheStoreSession.html
index 0093d20..da882a5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/class-use/CacheStoreSession.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/class-use/CacheStoreSession.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/class-use/CacheStoreSession.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.store.CacheStoreSession (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/class-use/CacheStoreSessionListener.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/class-use/CacheStoreSessionListener.html
index 24581d0..9c982ea 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/class-use/CacheStoreSessionListener.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/class-use/CacheStoreSessionListener.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/class-use/CacheStoreSessionListener.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.store.CacheStoreSessionListener (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/CacheAbstractJdbcStore.EntryMapping.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/CacheAbstractJdbcStore.EntryMapping.html
index ea1e651..457de9d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/CacheAbstractJdbcStore.EntryMapping.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/CacheAbstractJdbcStore.EntryMapping.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/CacheAbstractJdbcStore.EntryMapping.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheAbstractJdbcStore.EntryMapping (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/CacheAbstractJdbcStore.TypeKind.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/CacheAbstractJdbcStore.TypeKind.html
index 047c97e..f905657 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/CacheAbstractJdbcStore.TypeKind.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/CacheAbstractJdbcStore.TypeKind.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/CacheAbstractJdbcStore.TypeKind.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheAbstractJdbcStore.TypeKind (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/CacheAbstractJdbcStore.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/CacheAbstractJdbcStore.html
index 33d5190..7b1cd3b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/CacheAbstractJdbcStore.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/CacheAbstractJdbcStore.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/CacheAbstractJdbcStore.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheAbstractJdbcStore (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/CacheJdbcBlobStore.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/CacheJdbcBlobStore.html
index ee39918..980dcf1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/CacheJdbcBlobStore.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/CacheJdbcBlobStore.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/CacheJdbcBlobStore.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheJdbcBlobStore (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/CacheJdbcBlobStoreFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/CacheJdbcBlobStoreFactory.html
index a910dac..59e2f16 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/CacheJdbcBlobStoreFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/CacheJdbcBlobStoreFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/CacheJdbcBlobStoreFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheJdbcBlobStoreFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStore.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStore.html
index 6f86a93..c502d0c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStore.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStore.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStore.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheJdbcPojoStore (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreFactory.html
index 1227bda..dd5816c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheJdbcPojoStoreFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/CacheJdbcStoreSessionListener.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/CacheJdbcStoreSessionListener.html
index 47d705e..55d1752 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/CacheJdbcStoreSessionListener.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/CacheJdbcStoreSessionListener.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/CacheJdbcStoreSessionListener.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheJdbcStoreSessionListener (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/JdbcType.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/JdbcType.html
index 21943a5..d85e3b2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/JdbcType.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/JdbcType.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/JdbcType.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>JdbcType (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/JdbcTypeDefaultHasher.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/JdbcTypeDefaultHasher.html
index 835a5f7..f63fc02 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/JdbcTypeDefaultHasher.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/JdbcTypeDefaultHasher.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/JdbcTypeDefaultHasher.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>JdbcTypeDefaultHasher (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/JdbcTypeField.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/JdbcTypeField.html
index e3e83b2..2d1f101 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/JdbcTypeField.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/JdbcTypeField.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/JdbcTypeField.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>JdbcTypeField (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/JdbcTypeHasher.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/JdbcTypeHasher.html
index 766a1e2..b8dfeca 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/JdbcTypeHasher.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/JdbcTypeHasher.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/JdbcTypeHasher.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>JdbcTypeHasher (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/JdbcTypesDefaultTransformer.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/JdbcTypesDefaultTransformer.html
index b3420e4..0437524 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/JdbcTypesDefaultTransformer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/JdbcTypesDefaultTransformer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/JdbcTypesDefaultTransformer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>JdbcTypesDefaultTransformer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/JdbcTypesTransformer.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/JdbcTypesTransformer.html
index e538767..edaebde 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/JdbcTypesTransformer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/JdbcTypesTransformer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/JdbcTypesTransformer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>JdbcTypesTransformer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheAbstractJdbcStore.EntryMapping.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheAbstractJdbcStore.EntryMapping.html
index 8c25c0d..eae9ae1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheAbstractJdbcStore.EntryMapping.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheAbstractJdbcStore.EntryMapping.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheAbstractJdbcStore.EntryMapping.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.jdbc.CacheAbstractJdbcStore.EntryMapping (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheAbstractJdbcStore.TypeKind.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheAbstractJdbcStore.TypeKind.html
index a33fe86..c558bf4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheAbstractJdbcStore.TypeKind.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheAbstractJdbcStore.TypeKind.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheAbstractJdbcStore.TypeKind.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.jdbc.CacheAbstractJdbcStore.TypeKind (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheAbstractJdbcStore.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheAbstractJdbcStore.html
index baf5a37..c5087db 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheAbstractJdbcStore.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheAbstractJdbcStore.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheAbstractJdbcStore.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.jdbc.CacheAbstractJdbcStore (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheJdbcBlobStore.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheJdbcBlobStore.html
index e0e487c..166430d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheJdbcBlobStore.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheJdbcBlobStore.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheJdbcBlobStore.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.jdbc.CacheJdbcBlobStore (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheJdbcBlobStoreFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheJdbcBlobStoreFactory.html
index da6d9fd..4a48f6d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheJdbcBlobStoreFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheJdbcBlobStoreFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheJdbcBlobStoreFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.jdbc.CacheJdbcBlobStoreFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheJdbcPojoStore.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheJdbcPojoStore.html
index ca34f7e..01a9d40 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheJdbcPojoStore.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheJdbcPojoStore.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheJdbcPojoStore.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.jdbc.CacheJdbcPojoStore (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheJdbcPojoStoreFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheJdbcPojoStoreFactory.html
index e1029b6..5ea5a0b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheJdbcPojoStoreFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheJdbcPojoStoreFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheJdbcPojoStoreFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.jdbc.CacheJdbcPojoStoreFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheJdbcStoreSessionListener.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheJdbcStoreSessionListener.html
index 33c10ce..95ee964 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheJdbcStoreSessionListener.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheJdbcStoreSessionListener.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/class-use/CacheJdbcStoreSessionListener.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.jdbc.CacheJdbcStoreSessionListener (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/JdbcType.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/JdbcType.html
index 7157153..468e8ee 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/JdbcType.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/JdbcType.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/class-use/JdbcType.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.jdbc.JdbcType (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/JdbcTypeDefaultHasher.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/JdbcTypeDefaultHasher.html
index ba15e11..b57260e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/JdbcTypeDefaultHasher.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/JdbcTypeDefaultHasher.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/class-use/JdbcTypeDefaultHasher.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.jdbc.JdbcTypeDefaultHasher (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/JdbcTypeField.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/JdbcTypeField.html
index 5c22d09..38d52db 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/JdbcTypeField.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/JdbcTypeField.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/class-use/JdbcTypeField.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.jdbc.JdbcTypeField (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/JdbcTypeHasher.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/JdbcTypeHasher.html
index b559f75..dc694f1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/JdbcTypeHasher.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/JdbcTypeHasher.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/class-use/JdbcTypeHasher.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.store.jdbc.JdbcTypeHasher (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/JdbcTypesDefaultTransformer.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/JdbcTypesDefaultTransformer.html
index db7b376..f30bb01 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/JdbcTypesDefaultTransformer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/JdbcTypesDefaultTransformer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/class-use/JdbcTypesDefaultTransformer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.jdbc.JdbcTypesDefaultTransformer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/JdbcTypesTransformer.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/JdbcTypesTransformer.html
index 164ecf5..8212e36 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/JdbcTypesTransformer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/class-use/JdbcTypesTransformer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/class-use/JdbcTypesTransformer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.store.jdbc.JdbcTypesTransformer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/BasicJdbcDialect.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/BasicJdbcDialect.html
index fd65976..a7f7d4e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/BasicJdbcDialect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/BasicJdbcDialect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/dialect/BasicJdbcDialect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BasicJdbcDialect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/DB2Dialect.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/DB2Dialect.html
index 5885ea0..555eb8a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/DB2Dialect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/DB2Dialect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/dialect/DB2Dialect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DB2Dialect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/H2Dialect.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/H2Dialect.html
index 86130e2..7676de4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/H2Dialect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/H2Dialect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/dialect/H2Dialect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>H2Dialect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/JdbcDialect.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/JdbcDialect.html
index 2d1e650..d1b8cbb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/JdbcDialect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/JdbcDialect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/dialect/JdbcDialect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>JdbcDialect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/MySQLDialect.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/MySQLDialect.html
index 68154fc..4baacd1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/MySQLDialect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/MySQLDialect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/dialect/MySQLDialect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MySQLDialect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/OracleDialect.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/OracleDialect.html
index 68f75be..a4b16db 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/OracleDialect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/OracleDialect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/dialect/OracleDialect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>OracleDialect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/SQLServerDialect.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/SQLServerDialect.html
index 36cdeb7..f8c0a41 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/SQLServerDialect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/SQLServerDialect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/dialect/SQLServerDialect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SQLServerDialect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/class-use/BasicJdbcDialect.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/class-use/BasicJdbcDialect.html
index 7bfd737..87a6084 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/class-use/BasicJdbcDialect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/class-use/BasicJdbcDialect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/dialect/class-use/BasicJdbcDialect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.jdbc.dialect.BasicJdbcDialect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/class-use/DB2Dialect.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/class-use/DB2Dialect.html
index ddff30b..d0d8883 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/class-use/DB2Dialect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/class-use/DB2Dialect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/dialect/class-use/DB2Dialect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.jdbc.dialect.DB2Dialect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/class-use/H2Dialect.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/class-use/H2Dialect.html
index bb042f4..c5d2037 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/class-use/H2Dialect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/class-use/H2Dialect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/dialect/class-use/H2Dialect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.jdbc.dialect.H2Dialect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/class-use/JdbcDialect.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/class-use/JdbcDialect.html
index 5a286e1..d41dc33 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/class-use/JdbcDialect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/class-use/JdbcDialect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/dialect/class-use/JdbcDialect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cache.store.jdbc.dialect.JdbcDialect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/class-use/MySQLDialect.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/class-use/MySQLDialect.html
index 5c0a08b..1697b79 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/class-use/MySQLDialect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/class-use/MySQLDialect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/dialect/class-use/MySQLDialect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.jdbc.dialect.MySQLDialect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/class-use/OracleDialect.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/class-use/OracleDialect.html
index b8036f0..7d041b8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/class-use/OracleDialect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/class-use/OracleDialect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/dialect/class-use/OracleDialect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.jdbc.dialect.OracleDialect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/class-use/SQLServerDialect.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/class-use/SQLServerDialect.html
index acc25e8..787a57e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/class-use/SQLServerDialect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/class-use/SQLServerDialect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/dialect/class-use/SQLServerDialect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.jdbc.dialect.SQLServerDialect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/package-frame.html
index f343894..fa0ea49 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/dialect/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.jdbc.dialect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/package-summary.html
index bfdda41..693ab12 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/dialect/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.jdbc.dialect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/package-tree.html
index 2263032..9c00024 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/dialect/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.jdbc.dialect Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/package-use.html
index 68a7e93..9cc3ebd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/dialect/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/dialect/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.cache.store.jdbc.dialect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/package-frame.html
index 5d2b002..7898454 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.jdbc (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/package-summary.html
index 5be0417..48d07be 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.jdbc (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/package-tree.html
index 51d76f5..081346d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.jdbc Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/package-use.html
index cdd65ae..fd0a918 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/jdbc/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/jdbc/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.cache.store.jdbc (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/package-frame.html
index 29a2e9d..4e9a4c6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/package-summary.html
index 695d092..06a7daf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/package-tree.html
index 88fef74..4361f5a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/package-use.html
index a5fff22..53f38b4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.cache.store (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/spring/CacheSpringStoreSessionListener.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/spring/CacheSpringStoreSessionListener.html
index 768ab21..5094714 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/spring/CacheSpringStoreSessionListener.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/spring/CacheSpringStoreSessionListener.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/spring/CacheSpringStoreSessionListener.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheSpringStoreSessionListener (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/spring/class-use/CacheSpringStoreSessionListener.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/spring/class-use/CacheSpringStoreSessionListener.html
index 37cb2cd..97ed62c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/spring/class-use/CacheSpringStoreSessionListener.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/spring/class-use/CacheSpringStoreSessionListener.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/spring/class-use/CacheSpringStoreSessionListener.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.store.spring.CacheSpringStoreSessionListener (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/spring/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/spring/package-frame.html
index 8991288..7965378 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/spring/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/spring/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/spring/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.spring (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/spring/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/spring/package-summary.html
index 30cc141..bd857a2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/spring/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/spring/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/spring/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.spring (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/spring/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/spring/package-tree.html
index b6f212e..68fb60c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/spring/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/spring/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/spring/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.store.spring Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/spring/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/spring/package-use.html
index 24a552b..5a97e44 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/store/spring/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/store/spring/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/store/spring/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.cache.store.spring (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/websession/WebSessionFilter.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/websession/WebSessionFilter.html
index 076ad0b..f18c7bb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/websession/WebSessionFilter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/websession/WebSessionFilter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/websession/WebSessionFilter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>WebSessionFilter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/websession/class-use/WebSessionFilter.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/websession/class-use/WebSessionFilter.html
index 3f749fc..e370651 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/websession/class-use/WebSessionFilter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/websession/class-use/WebSessionFilter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/websession/class-use/WebSessionFilter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cache.websession.WebSessionFilter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/websession/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/websession/package-frame.html
index 306ef9a..bb89158 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/websession/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/websession/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/websession/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.websession (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/websession/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/websession/package-summary.html
index 0eb8a76..fc4d677 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/websession/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/websession/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/websession/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.websession (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/websession/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/websession/package-tree.html
index 9f6b5bf..1da10c1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/websession/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/websession/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/websession/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cache.websession Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cache/websession/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/cache/websession/package-use.html
index 211b9fa..65aff4b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cache/websession/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cache/websession/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/websession/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.cache.websession (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/DataRegionMetrics.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/DataRegionMetrics.html
index 6f9676a..41dfb9b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/DataRegionMetrics.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/DataRegionMetrics.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/DataRegionMetrics.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.DataRegionMetrics (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/DataRegionMetricsAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/DataRegionMetricsAdapter.html
index 7e2d729..34b0a79 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/DataRegionMetricsAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/DataRegionMetricsAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/DataRegionMetricsAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.DataRegionMetricsAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/DataRegionMetricsProvider.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/DataRegionMetricsProvider.html
index 1fe848b..5672791 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/DataRegionMetricsProvider.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/DataRegionMetricsProvider.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/DataRegionMetricsProvider.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.DataRegionMetricsProvider (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/DataStorageMetrics.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/DataStorageMetrics.html
index e02fc24..b8ab42f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/DataStorageMetrics.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/DataStorageMetrics.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/DataStorageMetrics.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.DataStorageMetrics (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/DataStorageMetricsAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/DataStorageMetricsAdapter.html
index a6d8af9..501a170 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/DataStorageMetricsAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/DataStorageMetricsAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/DataStorageMetricsAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.DataStorageMetricsAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/Ignite.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/Ignite.html
index 42a96ff..eb9d4fa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/Ignite.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/Ignite.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/Ignite.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.Ignite (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteAtomicLong.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteAtomicLong.html
index 0838c24..a5d1e97 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteAtomicLong.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteAtomicLong.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteAtomicLong.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.IgniteAtomicLong (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteAtomicReference.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteAtomicReference.html
index 8a510c6..238dff4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteAtomicReference.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteAtomicReference.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteAtomicReference.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.IgniteAtomicReference (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteAtomicSequence.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteAtomicSequence.html
index b6c9658..3efe457 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteAtomicSequence.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteAtomicSequence.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteAtomicSequence.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.IgniteAtomicSequence (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteAtomicStamped.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteAtomicStamped.html
index bcbca82..80a0cc6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteAtomicStamped.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteAtomicStamped.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteAtomicStamped.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.IgniteAtomicStamped (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteAuthenticationException.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteAuthenticationException.html
index 9e55beb..ecf5c84 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteAuthenticationException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteAuthenticationException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteAuthenticationException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.IgniteAuthenticationException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteBinary.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteBinary.html
index f4c105f..05999c4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteBinary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteBinary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteBinary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.IgniteBinary (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteCache.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteCache.html
index e98c661..06ddbea 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteCache.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteCache.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteCache.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.IgniteCache (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteCacheRestartingException.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteCacheRestartingException.html
index e2e50ca..a99eb60 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteCacheRestartingException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteCacheRestartingException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteCacheRestartingException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.IgniteCacheRestartingException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteCheckedException.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteCheckedException.html
index bb4890a..a682a98 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteCheckedException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteCheckedException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteCheckedException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.IgniteCheckedException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteClientDisconnectedException.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteClientDisconnectedException.html
index 81695ca..19bb8dd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteClientDisconnectedException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteClientDisconnectedException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteClientDisconnectedException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.IgniteClientDisconnectedException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteCluster.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteCluster.html
index 0026f29..ee311dc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteCluster.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteCluster.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteCluster.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.IgniteCluster (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteCompute.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteCompute.html
index 5624e81..e092d60 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteCompute.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteCompute.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteCompute.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.IgniteCompute (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteCondition.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteCondition.html
index e88d224..16b807c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteCondition.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteCondition.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteCondition.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.IgniteCondition (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteCountDownLatch.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteCountDownLatch.html
index d6a8025..177f6fc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteCountDownLatch.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteCountDownLatch.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteCountDownLatch.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.IgniteCountDownLatch (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteDataStreamer.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteDataStreamer.html
index d9b8219..3480b0e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteDataStreamer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteDataStreamer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteDataStreamer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.IgniteDataStreamer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteDataStreamerTimeoutException.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteDataStreamerTimeoutException.html
index cb7cefc..3c5d784 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteDataStreamerTimeoutException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteDataStreamerTimeoutException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteDataStreamerTimeoutException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.IgniteDataStreamerTimeoutException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteDeploymentException.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteDeploymentException.html
index 890aa44..bfda478 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteDeploymentException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteDeploymentException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteDeploymentException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.IgniteDeploymentException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteEncryption.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteEncryption.html
index 79a606e..cd9944c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteEncryption.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteEncryption.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteEncryption.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.IgniteEncryption (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteEvents.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteEvents.html
index b2fe05b..c444699 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteEvents.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteEvents.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteEvents.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.IgniteEvents (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteException.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteException.html
index 79e2914..031ba5d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.IgniteException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteIllegalStateException.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteIllegalStateException.html
index 159f4a1..2fc02f9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteIllegalStateException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteIllegalStateException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteIllegalStateException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.IgniteIllegalStateException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteInterruptedException.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteInterruptedException.html
index 2a1aa68..4a506df 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteInterruptedException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteInterruptedException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteInterruptedException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.IgniteInterruptedException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteJdbcDriver.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteJdbcDriver.html
index c46df90..a784a11 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteJdbcDriver.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteJdbcDriver.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteJdbcDriver.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.IgniteJdbcDriver (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteJdbcThinDataSource.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteJdbcThinDataSource.html
index f7d2af1..2883d2b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteJdbcThinDataSource.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteJdbcThinDataSource.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteJdbcThinDataSource.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.IgniteJdbcThinDataSource (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteJdbcThinDriver.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteJdbcThinDriver.html
index 21b82ce..0b11bea 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteJdbcThinDriver.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteJdbcThinDriver.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteJdbcThinDriver.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.IgniteJdbcThinDriver (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteLock.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteLock.html
index 73ea08d..8cf02b1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteLock.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteLock.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteLock.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.IgniteLock (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteLogger.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteLogger.html
index 9ffe4cd..300767f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteLogger.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteLogger.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteLogger.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.IgniteLogger (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteMessaging.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteMessaging.html
index 2dab7ef..5777e88 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteMessaging.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteMessaging.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteMessaging.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.IgniteMessaging (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteQueue.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteQueue.html
index ac78cc0..70f9c12 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteQueue.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteQueue.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteQueue.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.IgniteQueue (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteScheduler.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteScheduler.html
index a3a40d1..74a3b24 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteScheduler.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteScheduler.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteScheduler.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.IgniteScheduler (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteSemaphore.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteSemaphore.html
index 3649b9d..4a94851 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteSemaphore.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteSemaphore.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteSemaphore.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.IgniteSemaphore (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteServices.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteServices.html
index 9cf2aa5..9309ca7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteServices.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteServices.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteServices.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.IgniteServices (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteSet.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteSet.html
index 1be55e8..1c9b2ce 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteSet.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteSet.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteSet.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.IgniteSet (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteSnapshot.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteSnapshot.html
index 5319fae..771dd0b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteSnapshot.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteSnapshot.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteSnapshot.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.IgniteSnapshot (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteSpring.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteSpring.html
index 325d47e..fbbe47a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteSpring.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteSpring.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteSpring.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.IgniteSpring (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteSpringBean.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteSpringBean.html
index f8c8b43..f7c8aaf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteSpringBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteSpringBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteSpringBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.IgniteSpringBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteState.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteState.html
index 948a2bd..e8d189e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteState.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteState.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteState.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.IgniteState (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteSystemProperties.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteSystemProperties.html
index c530d8b..3e7491d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteSystemProperties.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteSystemProperties.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteSystemProperties.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.IgniteSystemProperties (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteTransactions.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteTransactions.html
index a0e9994..1a1cb5f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteTransactions.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgniteTransactions.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgniteTransactions.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.IgniteTransactions (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/Ignition.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/Ignition.html
index 69bf76d..2fb6577 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/Ignition.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/Ignition.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/Ignition.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.Ignition (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgnitionListener.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgnitionListener.html
index 8d77423..2864358 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgnitionListener.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/IgnitionListener.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/IgnitionListener.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.IgnitionListener (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/MemoryMetrics.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/MemoryMetrics.html
index 9760b3e..1ec962c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/MemoryMetrics.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/MemoryMetrics.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/MemoryMetrics.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.MemoryMetrics (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/class-use/PersistenceMetrics.html b/releases/2.9.1/javadoc/org/apache/ignite/class-use/PersistenceMetrics.html
index 194c21c..e34b514 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/class-use/PersistenceMetrics.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/class-use/PersistenceMetrics.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/class-use/PersistenceMetrics.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.PersistenceMetrics (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/ClientAuthenticationException.html b/releases/2.9.1/javadoc/org/apache/ignite/client/ClientAuthenticationException.html
index 39cee19..2fc6610 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/ClientAuthenticationException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/ClientAuthenticationException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/ClientAuthenticationException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClientAuthenticationException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/ClientAuthorizationException.html b/releases/2.9.1/javadoc/org/apache/ignite/client/ClientAuthorizationException.html
index 2bec7d3..141ab9f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/ClientAuthorizationException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/ClientAuthorizationException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/ClientAuthorizationException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClientAuthorizationException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/ClientCache.html b/releases/2.9.1/javadoc/org/apache/ignite/client/ClientCache.html
index 5b0a229..8f87f7a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/ClientCache.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/ClientCache.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/ClientCache.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClientCache (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/ClientCacheConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/client/ClientCacheConfiguration.html
index a191c6e..860e0cc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/ClientCacheConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/ClientCacheConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/ClientCacheConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClientCacheConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/ClientCluster.html b/releases/2.9.1/javadoc/org/apache/ignite/client/ClientCluster.html
index a3d9b87..4fe7a8d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/ClientCluster.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/ClientCluster.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/ClientCluster.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClientCluster (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/ClientClusterGroup.html b/releases/2.9.1/javadoc/org/apache/ignite/client/ClientClusterGroup.html
index 8716966..c2d9244 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/ClientClusterGroup.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/ClientClusterGroup.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/ClientClusterGroup.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClientClusterGroup (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/ClientCompute.html b/releases/2.9.1/javadoc/org/apache/ignite/client/ClientCompute.html
index 098690f..5184fc0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/ClientCompute.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/ClientCompute.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/ClientCompute.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClientCompute (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/ClientConnectionException.html b/releases/2.9.1/javadoc/org/apache/ignite/client/ClientConnectionException.html
index a122ce8..d7189b2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/ClientConnectionException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/ClientConnectionException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/ClientConnectionException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClientConnectionException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/ClientException.html b/releases/2.9.1/javadoc/org/apache/ignite/client/ClientException.html
index 83aa687..8e4c34b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/ClientException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/ClientException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/ClientException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClientException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/ClientFeatureNotSupportedByServerException.html b/releases/2.9.1/javadoc/org/apache/ignite/client/ClientFeatureNotSupportedByServerException.html
index b8bcb4c..91fe706 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/ClientFeatureNotSupportedByServerException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/ClientFeatureNotSupportedByServerException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/ClientFeatureNotSupportedByServerException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClientFeatureNotSupportedByServerException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/ClientReconnectedException.html b/releases/2.9.1/javadoc/org/apache/ignite/client/ClientReconnectedException.html
index bf0470d..678c6f6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/ClientReconnectedException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/ClientReconnectedException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/ClientReconnectedException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClientReconnectedException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/ClientServices.html b/releases/2.9.1/javadoc/org/apache/ignite/client/ClientServices.html
index 3677f2d..b3a388a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/ClientServices.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/ClientServices.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/ClientServices.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClientServices (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/ClientTransaction.html b/releases/2.9.1/javadoc/org/apache/ignite/client/ClientTransaction.html
index b04aef0..6a7692e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/ClientTransaction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/ClientTransaction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/ClientTransaction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClientTransaction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/ClientTransactions.html b/releases/2.9.1/javadoc/org/apache/ignite/client/ClientTransactions.html
index 2ccdcf6..6c6329f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/ClientTransactions.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/ClientTransactions.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/ClientTransactions.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClientTransactions (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/IgniteClient.html b/releases/2.9.1/javadoc/org/apache/ignite/client/IgniteClient.html
index a5c225f..e542054 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/IgniteClient.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/IgniteClient.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/IgniteClient.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteClient (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/SslMode.html b/releases/2.9.1/javadoc/org/apache/ignite/client/SslMode.html
index 3a27ee6..5bb3035 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/SslMode.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/SslMode.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/SslMode.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SslMode (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/SslProtocol.html b/releases/2.9.1/javadoc/org/apache/ignite/client/SslProtocol.html
index 64ccc42..a733e0d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/SslProtocol.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/SslProtocol.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/SslProtocol.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SslProtocol (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientAuthenticationException.html b/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientAuthenticationException.html
index 8c0f816..8f494ef 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientAuthenticationException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientAuthenticationException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/class-use/ClientAuthenticationException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.client.ClientAuthenticationException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientAuthorizationException.html b/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientAuthorizationException.html
index f059a85..58c1ec9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientAuthorizationException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientAuthorizationException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/class-use/ClientAuthorizationException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.client.ClientAuthorizationException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientCache.html b/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientCache.html
index 7840de8..7ea86b9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientCache.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientCache.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/class-use/ClientCache.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.client.ClientCache (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientCacheConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientCacheConfiguration.html
index 6e9ac7f..f26070a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientCacheConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientCacheConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/class-use/ClientCacheConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.client.ClientCacheConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientCluster.html b/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientCluster.html
index 4d378a7..a23cd65 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientCluster.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientCluster.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/class-use/ClientCluster.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.client.ClientCluster (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientClusterGroup.html b/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientClusterGroup.html
index 523b419..e676142 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientClusterGroup.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientClusterGroup.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/class-use/ClientClusterGroup.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.client.ClientClusterGroup (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientCompute.html b/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientCompute.html
index dd14e50..3f83787 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientCompute.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientCompute.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/class-use/ClientCompute.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.client.ClientCompute (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientConnectionException.html b/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientConnectionException.html
index c9efd29..fb6d528 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientConnectionException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientConnectionException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/class-use/ClientConnectionException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.client.ClientConnectionException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientException.html b/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientException.html
index 89dce3e..9c685f4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/class-use/ClientException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.client.ClientException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientFeatureNotSupportedByServerException.html b/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientFeatureNotSupportedByServerException.html
index 8f6142d..b87f91c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientFeatureNotSupportedByServerException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientFeatureNotSupportedByServerException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/class-use/ClientFeatureNotSupportedByServerException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.client.ClientFeatureNotSupportedByServerException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientReconnectedException.html b/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientReconnectedException.html
index c0079a6..579d706 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientReconnectedException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientReconnectedException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/class-use/ClientReconnectedException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.client.ClientReconnectedException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientServices.html b/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientServices.html
index fd5dea0..98658a7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientServices.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientServices.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/class-use/ClientServices.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.client.ClientServices (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientTransaction.html b/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientTransaction.html
index 1b47e25..2d7a574 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientTransaction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientTransaction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/class-use/ClientTransaction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.client.ClientTransaction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientTransactions.html b/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientTransactions.html
index a4857c9..6527608 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientTransactions.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/ClientTransactions.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/class-use/ClientTransactions.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.client.ClientTransactions (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/IgniteClient.html b/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/IgniteClient.html
index dd3600a..231d748 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/IgniteClient.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/IgniteClient.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/class-use/IgniteClient.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.client.IgniteClient (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/SslMode.html b/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/SslMode.html
index ff19e38..70ac98c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/SslMode.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/SslMode.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/class-use/SslMode.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.client.SslMode (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/SslProtocol.html b/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/SslProtocol.html
index 5b6f5b5..ef4484e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/SslProtocol.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/class-use/SslProtocol.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/class-use/SslProtocol.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.client.SslProtocol (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/client/package-frame.html
index dbba8e4..4cda2bf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.client (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/client/package-summary.html
index 716cafd..b808fb8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.client (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/client/package-tree.html
index 8812324..898c04e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.client Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/client/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/client/package-use.html
index 4de66d8..73bb531 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/client/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/client/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/client/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.client (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cluster/BaselineNode.html b/releases/2.9.1/javadoc/org/apache/ignite/cluster/BaselineNode.html
index 49a03b8..13a18ea 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cluster/BaselineNode.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cluster/BaselineNode.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cluster/BaselineNode.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BaselineNode (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cluster/ClusterGroup.html b/releases/2.9.1/javadoc/org/apache/ignite/cluster/ClusterGroup.html
index 27bb30c..fac4238 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cluster/ClusterGroup.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cluster/ClusterGroup.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cluster/ClusterGroup.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClusterGroup (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cluster/ClusterGroupEmptyException.html b/releases/2.9.1/javadoc/org/apache/ignite/cluster/ClusterGroupEmptyException.html
index b663bf5..e0b86b8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cluster/ClusterGroupEmptyException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cluster/ClusterGroupEmptyException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cluster/ClusterGroupEmptyException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClusterGroupEmptyException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cluster/ClusterMetrics.html b/releases/2.9.1/javadoc/org/apache/ignite/cluster/ClusterMetrics.html
index 65eb37e..ce47e99 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cluster/ClusterMetrics.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cluster/ClusterMetrics.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cluster/ClusterMetrics.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClusterMetrics (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cluster/ClusterNode.html b/releases/2.9.1/javadoc/org/apache/ignite/cluster/ClusterNode.html
index 8d0a250..dcaa1f8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cluster/ClusterNode.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cluster/ClusterNode.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cluster/ClusterNode.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClusterNode (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cluster/ClusterStartNodeResult.html b/releases/2.9.1/javadoc/org/apache/ignite/cluster/ClusterStartNodeResult.html
index d7cb371..d11f694 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cluster/ClusterStartNodeResult.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cluster/ClusterStartNodeResult.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cluster/ClusterStartNodeResult.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClusterStartNodeResult (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cluster/ClusterState.html b/releases/2.9.1/javadoc/org/apache/ignite/cluster/ClusterState.html
index ac1c2c3..541656b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cluster/ClusterState.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cluster/ClusterState.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cluster/ClusterState.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClusterState (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cluster/ClusterTopologyException.html b/releases/2.9.1/javadoc/org/apache/ignite/cluster/ClusterTopologyException.html
index 706b2b4..251fff5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cluster/ClusterTopologyException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cluster/ClusterTopologyException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cluster/ClusterTopologyException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClusterTopologyException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cluster/class-use/BaselineNode.html b/releases/2.9.1/javadoc/org/apache/ignite/cluster/class-use/BaselineNode.html
index 72489ac..5b71bc2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cluster/class-use/BaselineNode.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cluster/class-use/BaselineNode.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cluster/class-use/BaselineNode.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cluster.BaselineNode (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cluster/class-use/ClusterGroup.html b/releases/2.9.1/javadoc/org/apache/ignite/cluster/class-use/ClusterGroup.html
index f762275..ddd27a4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cluster/class-use/ClusterGroup.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cluster/class-use/ClusterGroup.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cluster/class-use/ClusterGroup.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cluster.ClusterGroup (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cluster/class-use/ClusterGroupEmptyException.html b/releases/2.9.1/javadoc/org/apache/ignite/cluster/class-use/ClusterGroupEmptyException.html
index 37222fd..a7cef27 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cluster/class-use/ClusterGroupEmptyException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cluster/class-use/ClusterGroupEmptyException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cluster/class-use/ClusterGroupEmptyException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cluster.ClusterGroupEmptyException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cluster/class-use/ClusterMetrics.html b/releases/2.9.1/javadoc/org/apache/ignite/cluster/class-use/ClusterMetrics.html
index c137216..4e4b220 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cluster/class-use/ClusterMetrics.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cluster/class-use/ClusterMetrics.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cluster/class-use/ClusterMetrics.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cluster.ClusterMetrics (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cluster/class-use/ClusterNode.html b/releases/2.9.1/javadoc/org/apache/ignite/cluster/class-use/ClusterNode.html
index 3b5d372..139f29f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cluster/class-use/ClusterNode.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cluster/class-use/ClusterNode.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cluster/class-use/ClusterNode.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cluster.ClusterNode (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cluster/class-use/ClusterStartNodeResult.html b/releases/2.9.1/javadoc/org/apache/ignite/cluster/class-use/ClusterStartNodeResult.html
index 747638f..7cec5b5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cluster/class-use/ClusterStartNodeResult.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cluster/class-use/ClusterStartNodeResult.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cluster/class-use/ClusterStartNodeResult.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.cluster.ClusterStartNodeResult (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cluster/class-use/ClusterState.html b/releases/2.9.1/javadoc/org/apache/ignite/cluster/class-use/ClusterState.html
index de4434b..7dfb117 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cluster/class-use/ClusterState.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cluster/class-use/ClusterState.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cluster/class-use/ClusterState.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cluster.ClusterState (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cluster/class-use/ClusterTopologyException.html b/releases/2.9.1/javadoc/org/apache/ignite/cluster/class-use/ClusterTopologyException.html
index 1d42b26..f16a94b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cluster/class-use/ClusterTopologyException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cluster/class-use/ClusterTopologyException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cluster/class-use/ClusterTopologyException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.cluster.ClusterTopologyException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cluster/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/cluster/package-frame.html
index 4e41444..57aef57 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cluster/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cluster/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cluster/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cluster (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cluster/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/cluster/package-summary.html
index 5952f34..9a12df8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cluster/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cluster/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cluster/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cluster (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cluster/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/cluster/package-tree.html
index 010f9df..9e6f12e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cluster/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cluster/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cluster/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.cluster Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/cluster/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/cluster/package-use.html
index ef4131e..7ad80fe 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/cluster/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/cluster/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cluster/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.cluster (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeExecutionRejectedException.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeExecutionRejectedException.html
index fbef275..b8abe5e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeExecutionRejectedException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeExecutionRejectedException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/ComputeExecutionRejectedException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ComputeExecutionRejectedException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJob.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJob.html
index c3e08fe..6c15bc0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJob.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJob.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/ComputeJob.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ComputeJob (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobAdapter.html
index 0e560d0..789eb32 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/ComputeJobAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ComputeJobAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobAfterSend.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobAfterSend.html
index 00cf74e..ce49ff0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobAfterSend.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobAfterSend.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/ComputeJobAfterSend.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ComputeJobAfterSend (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobBeforeFailover.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobBeforeFailover.html
index 75a6c2e..9da553c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobBeforeFailover.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobBeforeFailover.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/ComputeJobBeforeFailover.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ComputeJobBeforeFailover (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobContext.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobContext.html
index c971d0f..b302155 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/ComputeJobContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ComputeJobContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobContinuation.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobContinuation.html
index 98f432f..d572d76 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobContinuation.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobContinuation.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/ComputeJobContinuation.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ComputeJobContinuation (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobContinuationAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobContinuationAdapter.html
index 32ce1b4..72c5628 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobContinuationAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobContinuationAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/ComputeJobContinuationAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ComputeJobContinuationAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobFailoverException.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobFailoverException.html
index 9a2cf2e..06ffc30 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobFailoverException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobFailoverException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/ComputeJobFailoverException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ComputeJobFailoverException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobMasterLeaveAware.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobMasterLeaveAware.html
index 8a4c517..13b0668 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobMasterLeaveAware.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobMasterLeaveAware.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/ComputeJobMasterLeaveAware.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ComputeJobMasterLeaveAware (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobResult.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobResult.html
index 07c7922..b308450 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobResult.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobResult.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/ComputeJobResult.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ComputeJobResult (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobResultPolicy.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobResultPolicy.html
index 6e43615..3c4de72 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobResultPolicy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobResultPolicy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/ComputeJobResultPolicy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ComputeJobResultPolicy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobSibling.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobSibling.html
index 02257b4..0beb1b8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobSibling.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeJobSibling.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/ComputeJobSibling.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ComputeJobSibling (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeLoadBalancer.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeLoadBalancer.html
index 5b8915d..1855167 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeLoadBalancer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeLoadBalancer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/ComputeLoadBalancer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ComputeLoadBalancer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTask.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTask.html
index 5f68011..b36a37f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTask.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTask.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/ComputeTask.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ComputeTask (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskAdapter.html
index 8d0ac90..c1c63e8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/ComputeTaskAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ComputeTaskAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskCancelledException.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskCancelledException.html
index ef1507b..a68385d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskCancelledException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskCancelledException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/ComputeTaskCancelledException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ComputeTaskCancelledException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskContinuousMapper.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskContinuousMapper.html
index 1d427a7..e4fc6fe 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskContinuousMapper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskContinuousMapper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/ComputeTaskContinuousMapper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ComputeTaskContinuousMapper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskFuture.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskFuture.html
index a75b027..667c778 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskFuture.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskFuture.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/ComputeTaskFuture.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ComputeTaskFuture (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskMapAsync.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskMapAsync.html
index 6c778ca..6ecd98f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskMapAsync.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskMapAsync.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/ComputeTaskMapAsync.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ComputeTaskMapAsync (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskName.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskName.html
index 160e401..619421d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskName.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskName.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/ComputeTaskName.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ComputeTaskName (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskNoResultCache.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskNoResultCache.html
index ea84ab8..579d984 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskNoResultCache.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskNoResultCache.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/ComputeTaskNoResultCache.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ComputeTaskNoResultCache (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskSession.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskSession.html
index 64a1645..bfa8abf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskSession.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskSession.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/ComputeTaskSession.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ComputeTaskSession (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskSessionAttributeListener.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskSessionAttributeListener.html
index b337137..d333b2a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskSessionAttributeListener.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskSessionAttributeListener.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/ComputeTaskSessionAttributeListener.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ComputeTaskSessionAttributeListener (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskSessionFullSupport.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskSessionFullSupport.html
index 2c38688..0236290 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskSessionFullSupport.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskSessionFullSupport.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/ComputeTaskSessionFullSupport.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ComputeTaskSessionFullSupport (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskSessionScope.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskSessionScope.html
index ec384ff..85f9117 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskSessionScope.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskSessionScope.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/ComputeTaskSessionScope.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ComputeTaskSessionScope (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskSpis.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskSpis.html
index 32526b6..413a04b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskSpis.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskSpis.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/ComputeTaskSpis.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ComputeTaskSpis (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskSplitAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskSplitAdapter.html
index f985c30..bc1465b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskSplitAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskSplitAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/ComputeTaskSplitAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ComputeTaskSplitAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskTimeoutException.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskTimeoutException.html
index b7e0f84..8eefce1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskTimeoutException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeTaskTimeoutException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/ComputeTaskTimeoutException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ComputeTaskTimeoutException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeUserUndeclaredException.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeUserUndeclaredException.html
index b8305bc..a13306e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeUserUndeclaredException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/ComputeUserUndeclaredException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/ComputeUserUndeclaredException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ComputeUserUndeclaredException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeExecutionRejectedException.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeExecutionRejectedException.html
index db2adcb..0631c73 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeExecutionRejectedException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeExecutionRejectedException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/class-use/ComputeExecutionRejectedException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.ComputeExecutionRejectedException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJob.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJob.html
index f38e0e5..62b0fdb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJob.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJob.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/class-use/ComputeJob.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.compute.ComputeJob (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobAdapter.html
index 55727ee..6c6d7d6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/class-use/ComputeJobAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.ComputeJobAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobAfterSend.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobAfterSend.html
index 4a8e329..0dafe13 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobAfterSend.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobAfterSend.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/class-use/ComputeJobAfterSend.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.ComputeJobAfterSend (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobBeforeFailover.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobBeforeFailover.html
index bd5f3ae..d7c8a53 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobBeforeFailover.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobBeforeFailover.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/class-use/ComputeJobBeforeFailover.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.ComputeJobBeforeFailover (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobContext.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobContext.html
index 6a53a1b..b3807d3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/class-use/ComputeJobContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.compute.ComputeJobContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobContinuation.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobContinuation.html
index aa5d1e6..3500a74 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobContinuation.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobContinuation.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/class-use/ComputeJobContinuation.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.compute.ComputeJobContinuation (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobContinuationAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobContinuationAdapter.html
index 145ebd5..2ac83a4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobContinuationAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobContinuationAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/class-use/ComputeJobContinuationAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.ComputeJobContinuationAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobFailoverException.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobFailoverException.html
index 959b486..c1c7744 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobFailoverException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobFailoverException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/class-use/ComputeJobFailoverException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.ComputeJobFailoverException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobMasterLeaveAware.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobMasterLeaveAware.html
index b130023..d4519d9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobMasterLeaveAware.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobMasterLeaveAware.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/class-use/ComputeJobMasterLeaveAware.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.compute.ComputeJobMasterLeaveAware (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobResult.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobResult.html
index 4437b02..75ea389 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobResult.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobResult.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/class-use/ComputeJobResult.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.compute.ComputeJobResult (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobResultPolicy.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobResultPolicy.html
index 8540a8a..183a1f4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobResultPolicy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobResultPolicy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/class-use/ComputeJobResultPolicy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.ComputeJobResultPolicy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobSibling.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobSibling.html
index 03ca7e4..e743b96 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobSibling.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeJobSibling.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/class-use/ComputeJobSibling.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.compute.ComputeJobSibling (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeLoadBalancer.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeLoadBalancer.html
index 1bffdc7..9e768ad 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeLoadBalancer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeLoadBalancer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/class-use/ComputeLoadBalancer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.compute.ComputeLoadBalancer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTask.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTask.html
index 404f404..7a58545 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTask.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTask.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/class-use/ComputeTask.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.compute.ComputeTask (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskAdapter.html
index 1ac7ede..27f6876 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/class-use/ComputeTaskAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.ComputeTaskAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskCancelledException.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskCancelledException.html
index b0ca9e9..a025dd9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskCancelledException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskCancelledException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/class-use/ComputeTaskCancelledException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.ComputeTaskCancelledException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskContinuousMapper.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskContinuousMapper.html
index b356478..8efd8bd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskContinuousMapper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskContinuousMapper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/class-use/ComputeTaskContinuousMapper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.compute.ComputeTaskContinuousMapper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskFuture.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskFuture.html
index b38ddf0..0be63a5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskFuture.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskFuture.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/class-use/ComputeTaskFuture.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.compute.ComputeTaskFuture (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskMapAsync.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskMapAsync.html
index c3ba7f1..bc5d071 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskMapAsync.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskMapAsync.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/class-use/ComputeTaskMapAsync.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.ComputeTaskMapAsync (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskName.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskName.html
index 07fa731..abdef65 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskName.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskName.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/class-use/ComputeTaskName.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.ComputeTaskName (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskNoResultCache.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskNoResultCache.html
index 123a2cf..a527725 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskNoResultCache.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskNoResultCache.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/class-use/ComputeTaskNoResultCache.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.ComputeTaskNoResultCache (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskSession.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskSession.html
index dd243e4..43bfefe 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskSession.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskSession.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/class-use/ComputeTaskSession.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.compute.ComputeTaskSession (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskSessionAttributeListener.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskSessionAttributeListener.html
index 48ce21b..b204798 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskSessionAttributeListener.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskSessionAttributeListener.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/class-use/ComputeTaskSessionAttributeListener.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.compute.ComputeTaskSessionAttributeListener (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskSessionFullSupport.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskSessionFullSupport.html
index d72e5c8..ae963ba 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskSessionFullSupport.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskSessionFullSupport.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/class-use/ComputeTaskSessionFullSupport.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.ComputeTaskSessionFullSupport (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskSessionScope.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskSessionScope.html
index 44ef377..9928f4c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskSessionScope.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskSessionScope.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/class-use/ComputeTaskSessionScope.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.ComputeTaskSessionScope (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskSpis.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskSpis.html
index e8683fd..c3dddd2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskSpis.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskSpis.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/class-use/ComputeTaskSpis.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.ComputeTaskSpis (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskSplitAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskSplitAdapter.html
index 283624d..633315a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskSplitAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskSplitAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/class-use/ComputeTaskSplitAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.ComputeTaskSplitAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskTimeoutException.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskTimeoutException.html
index 433b71f..8cb4efc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskTimeoutException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeTaskTimeoutException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/class-use/ComputeTaskTimeoutException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.ComputeTaskTimeoutException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeUserUndeclaredException.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeUserUndeclaredException.html
index 3eebf82..5238449 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeUserUndeclaredException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/class-use/ComputeUserUndeclaredException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/class-use/ComputeUserUndeclaredException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.ComputeUserUndeclaredException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/Gridify.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/Gridify.html
index 3972c94..b83fe50 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/Gridify.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/Gridify.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/Gridify.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Gridify (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifyArgument.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifyArgument.html
index 01d1663..cdb9e06 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifyArgument.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifyArgument.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/GridifyArgument.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GridifyArgument (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifyInput.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifyInput.html
index ce49fc0..b41ee3a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifyInput.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifyInput.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/GridifyInput.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GridifyInput (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifyInterceptor.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifyInterceptor.html
index 69741d4..d30cb82 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifyInterceptor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifyInterceptor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/GridifyInterceptor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GridifyInterceptor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifyNodeFilter.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifyNodeFilter.html
index 668bc30..f383546 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifyNodeFilter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifyNodeFilter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/GridifyNodeFilter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GridifyNodeFilter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifyRuntimeException.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifyRuntimeException.html
index 46d7146..c084131 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifyRuntimeException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifyRuntimeException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/GridifyRuntimeException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GridifyRuntimeException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifySetToSet.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifySetToSet.html
index d48fb3d..087d307 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifySetToSet.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifySetToSet.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/GridifySetToSet.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GridifySetToSet (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifySetToValue.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifySetToValue.html
index ef7c19c..3bee0a8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifySetToValue.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifySetToValue.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/GridifySetToValue.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GridifySetToValue (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifyTaskAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifyTaskAdapter.html
index 3da5405..8b78984 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifyTaskAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifyTaskAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/GridifyTaskAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GridifyTaskAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifyTaskSplitAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifyTaskSplitAdapter.html
index 8d25f87..6d87673 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifyTaskSplitAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/GridifyTaskSplitAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/GridifyTaskSplitAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GridifyTaskSplitAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/GridifyArgumentAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/GridifyArgumentAdapter.html
index 5c34dcf..664e4ad 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/GridifyArgumentAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/GridifyArgumentAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/GridifyArgumentAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GridifyArgumentAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/GridifyDefaultRangeTask.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/GridifyDefaultRangeTask.html
index 9965457..a78bac8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/GridifyDefaultRangeTask.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/GridifyDefaultRangeTask.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/GridifyDefaultRangeTask.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GridifyDefaultRangeTask (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/GridifyDefaultTask.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/GridifyDefaultTask.html
index 4be9a97..156b4cd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/GridifyDefaultTask.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/GridifyDefaultTask.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/GridifyDefaultTask.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GridifyDefaultTask (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/GridifySetToSetAbstractAspect.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/GridifySetToSetAbstractAspect.html
index b1c733f..accc1cf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/GridifySetToSetAbstractAspect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/GridifySetToSetAbstractAspect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/GridifySetToSetAbstractAspect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GridifySetToSetAbstractAspect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/GridifySetToValueAbstractAspect.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/GridifySetToValueAbstractAspect.html
index 0737219..5c0e2f2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/GridifySetToValueAbstractAspect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/GridifySetToValueAbstractAspect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/GridifySetToValueAbstractAspect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GridifySetToValueAbstractAspect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/GridifyAspectJAspect.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/GridifyAspectJAspect.html
index 6c754f2..6dfa1c6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/GridifyAspectJAspect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/GridifyAspectJAspect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/GridifyAspectJAspect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GridifyAspectJAspect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/GridifySetToSetAspectJAspect.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/GridifySetToSetAspectJAspect.html
index 732cb70..6aa5af9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/GridifySetToSetAspectJAspect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/GridifySetToSetAspectJAspect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/GridifySetToSetAspectJAspect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GridifySetToSetAspectJAspect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/GridifySetToValueAspectJAspect.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/GridifySetToValueAspectJAspect.html
index c1c0326..e800a72 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/GridifySetToValueAspectJAspect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/GridifySetToValueAspectJAspect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/GridifySetToValueAspectJAspect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GridifySetToValueAspectJAspect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/class-use/GridifyAspectJAspect.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/class-use/GridifyAspectJAspect.html
index 65051d4..13b3ce4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/class-use/GridifyAspectJAspect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/class-use/GridifyAspectJAspect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/class-use/GridifyAspectJAspect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.gridify.aop.aspectj.GridifyAspectJAspect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/class-use/GridifySetToSetAspectJAspect.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/class-use/GridifySetToSetAspectJAspect.html
index ca48e97..87bd96e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/class-use/GridifySetToSetAspectJAspect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/class-use/GridifySetToSetAspectJAspect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/class-use/GridifySetToSetAspectJAspect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.gridify.aop.aspectj.GridifySetToSetAspectJAspect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/class-use/GridifySetToValueAspectJAspect.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/class-use/GridifySetToValueAspectJAspect.html
index f6292d7..8010396 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/class-use/GridifySetToValueAspectJAspect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/class-use/GridifySetToValueAspectJAspect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/class-use/GridifySetToValueAspectJAspect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.gridify.aop.aspectj.GridifySetToValueAspectJAspect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/package-frame.html
index 314d0e7..eb4d7fa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.compute.gridify.aop.aspectj (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/package-summary.html
index 4bbd68a..0288ae6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.compute.gridify.aop.aspectj (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/package-tree.html
index f45b964..9e1e500 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.compute.gridify.aop.aspectj Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/package-use.html
index ba380db..005b659 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/aspectj/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.compute.gridify.aop.aspectj (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/class-use/GridifyArgumentAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/class-use/GridifyArgumentAdapter.html
index 2b056e2..89d6a71 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/class-use/GridifyArgumentAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/class-use/GridifyArgumentAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/class-use/GridifyArgumentAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.gridify.aop.GridifyArgumentAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/class-use/GridifyDefaultRangeTask.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/class-use/GridifyDefaultRangeTask.html
index d2b3828..edb8601 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/class-use/GridifyDefaultRangeTask.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/class-use/GridifyDefaultRangeTask.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/class-use/GridifyDefaultRangeTask.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.gridify.aop.GridifyDefaultRangeTask (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/class-use/GridifyDefaultTask.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/class-use/GridifyDefaultTask.html
index 1c793ba..60108ec 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/class-use/GridifyDefaultTask.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/class-use/GridifyDefaultTask.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/class-use/GridifyDefaultTask.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.gridify.aop.GridifyDefaultTask (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/class-use/GridifySetToSetAbstractAspect.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/class-use/GridifySetToSetAbstractAspect.html
index ca7773c..d6a84e5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/class-use/GridifySetToSetAbstractAspect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/class-use/GridifySetToSetAbstractAspect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/class-use/GridifySetToSetAbstractAspect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.gridify.aop.GridifySetToSetAbstractAspect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/class-use/GridifySetToValueAbstractAspect.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/class-use/GridifySetToValueAbstractAspect.html
index 72dc4df..36a8579 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/class-use/GridifySetToValueAbstractAspect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/class-use/GridifySetToValueAbstractAspect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/class-use/GridifySetToValueAbstractAspect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.gridify.aop.GridifySetToValueAbstractAspect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/package-frame.html
index 59fa35e..225fb66 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.compute.gridify.aop (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/package-summary.html
index 95d322b..7aae7f6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.compute.gridify.aop (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/package-tree.html
index c5e6b6a..7354850 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.compute.gridify.aop Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/package-use.html
index 097fdd0..19fcc24 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.compute.gridify.aop (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/GridifySetToSetSpringAspect.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/GridifySetToSetSpringAspect.html
index 98b6dec..94f2dec 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/GridifySetToSetSpringAspect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/GridifySetToSetSpringAspect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/spring/GridifySetToSetSpringAspect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GridifySetToSetSpringAspect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/GridifySetToValueSpringAspect.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/GridifySetToValueSpringAspect.html
index 9d77ebc..95ad5f9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/GridifySetToValueSpringAspect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/GridifySetToValueSpringAspect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/spring/GridifySetToValueSpringAspect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GridifySetToValueSpringAspect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/GridifySpringAspect.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/GridifySpringAspect.html
index e7eef7b..c47b227 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/GridifySpringAspect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/GridifySpringAspect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/spring/GridifySpringAspect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GridifySpringAspect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/GridifySpringEnhancer.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/GridifySpringEnhancer.html
index f18d9ec..a919474 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/GridifySpringEnhancer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/GridifySpringEnhancer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/spring/GridifySpringEnhancer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GridifySpringEnhancer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/GridifySpringPointcut.GridifySpringPointcutType.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/GridifySpringPointcut.GridifySpringPointcutType.html
index 294b0ce..5c70923 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/GridifySpringPointcut.GridifySpringPointcutType.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/GridifySpringPointcut.GridifySpringPointcutType.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/spring/GridifySpringPointcut.GridifySpringPointcutType.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GridifySpringPointcut.GridifySpringPointcutType (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/GridifySpringPointcut.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/GridifySpringPointcut.html
index 37e5b95..f32719e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/GridifySpringPointcut.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/GridifySpringPointcut.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/spring/GridifySpringPointcut.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GridifySpringPointcut (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/class-use/GridifySetToSetSpringAspect.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/class-use/GridifySetToSetSpringAspect.html
index d47feaa..3a95a3d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/class-use/GridifySetToSetSpringAspect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/class-use/GridifySetToSetSpringAspect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/spring/class-use/GridifySetToSetSpringAspect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.gridify.aop.spring.GridifySetToSetSpringAspect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/class-use/GridifySetToValueSpringAspect.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/class-use/GridifySetToValueSpringAspect.html
index 383479f..4202269 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/class-use/GridifySetToValueSpringAspect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/class-use/GridifySetToValueSpringAspect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/spring/class-use/GridifySetToValueSpringAspect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.gridify.aop.spring.GridifySetToValueSpringAspect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/class-use/GridifySpringAspect.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/class-use/GridifySpringAspect.html
index 2a5e363..08ffb0d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/class-use/GridifySpringAspect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/class-use/GridifySpringAspect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/spring/class-use/GridifySpringAspect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.gridify.aop.spring.GridifySpringAspect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/class-use/GridifySpringEnhancer.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/class-use/GridifySpringEnhancer.html
index ca40687..c898778 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/class-use/GridifySpringEnhancer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/class-use/GridifySpringEnhancer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/spring/class-use/GridifySpringEnhancer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.gridify.aop.spring.GridifySpringEnhancer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/class-use/GridifySpringPointcut.GridifySpringPointcutType.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/class-use/GridifySpringPointcut.GridifySpringPointcutType.html
index 9caa501..3479a76 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/class-use/GridifySpringPointcut.GridifySpringPointcutType.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/class-use/GridifySpringPointcut.GridifySpringPointcutType.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/spring/class-use/GridifySpringPointcut.GridifySpringPointcutType.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.gridify.aop.spring.GridifySpringPointcut.GridifySpringPointcutType (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/class-use/GridifySpringPointcut.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/class-use/GridifySpringPointcut.html
index c614c58..13147ec 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/class-use/GridifySpringPointcut.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/class-use/GridifySpringPointcut.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/spring/class-use/GridifySpringPointcut.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.gridify.aop.spring.GridifySpringPointcut (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/package-frame.html
index d177a7c..416538e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/spring/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.compute.gridify.aop.spring (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/package-summary.html
index 0eb437d..ad578fb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/spring/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.compute.gridify.aop.spring (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/package-tree.html
index fe308cf..95a65f8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/spring/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.compute.gridify.aop.spring Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/package-use.html
index 2f092b4..b461c30 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/aop/spring/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/aop/spring/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.compute.gridify.aop.spring (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/Gridify.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/Gridify.html
index 0fcc8bb..0406b56 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/Gridify.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/Gridify.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/class-use/Gridify.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.gridify.Gridify (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifyArgument.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifyArgument.html
index 3fc5e31..8f97642 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifyArgument.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifyArgument.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/class-use/GridifyArgument.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.compute.gridify.GridifyArgument (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifyInput.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifyInput.html
index 6b9d06e..f314f0e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifyInput.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifyInput.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/class-use/GridifyInput.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.gridify.GridifyInput (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifyInterceptor.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifyInterceptor.html
index 6150bdc..92cf52e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifyInterceptor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifyInterceptor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/class-use/GridifyInterceptor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.compute.gridify.GridifyInterceptor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifyNodeFilter.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifyNodeFilter.html
index f434239..048e612 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifyNodeFilter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifyNodeFilter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/class-use/GridifyNodeFilter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.compute.gridify.GridifyNodeFilter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifyRuntimeException.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifyRuntimeException.html
index 330b98d..5c71f64 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifyRuntimeException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifyRuntimeException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/class-use/GridifyRuntimeException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.gridify.GridifyRuntimeException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifySetToSet.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifySetToSet.html
index a23116f..b9de73c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifySetToSet.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifySetToSet.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/class-use/GridifySetToSet.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.gridify.GridifySetToSet (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifySetToValue.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifySetToValue.html
index ddd6122..67e3d4c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifySetToValue.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifySetToValue.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/class-use/GridifySetToValue.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.gridify.GridifySetToValue (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifyTaskAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifyTaskAdapter.html
index 5351e00..72ba89b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifyTaskAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifyTaskAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/class-use/GridifyTaskAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.gridify.GridifyTaskAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifyTaskSplitAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifyTaskSplitAdapter.html
index 98fdd68..6a3f331 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifyTaskSplitAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/class-use/GridifyTaskSplitAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/class-use/GridifyTaskSplitAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.compute.gridify.GridifyTaskSplitAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/package-frame.html
index cd75856..67b1955 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.compute.gridify (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/package-summary.html
index 9bff837..401d30a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.compute.gridify (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/package-tree.html
index 30c4984..3933092 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.compute.gridify Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/package-use.html
index 1e12bdc..66e0dc9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/gridify/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/gridify/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.compute.gridify (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/package-frame.html
index 105f83c..f37c1eb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.compute (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/package-summary.html
index 3312458..476a3b8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.compute (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/package-tree.html
index 3e280e3..6161e6e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.compute Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/compute/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/compute/package-use.html
index 4e2a933..145b2dd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/compute/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/compute/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/compute/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.compute (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/AddressResolver.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/AddressResolver.html
index 01ba95b..1c336aa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/AddressResolver.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/AddressResolver.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/AddressResolver.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>AddressResolver (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/AtomicConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/AtomicConfiguration.html
index 3422ab8..c9092ab 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/AtomicConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/AtomicConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/AtomicConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>AtomicConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/BasicAddressResolver.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/BasicAddressResolver.html
index 74292c2..c19e79b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/BasicAddressResolver.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/BasicAddressResolver.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/BasicAddressResolver.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BasicAddressResolver (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/BinaryConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/BinaryConfiguration.html
index 490f595..e49dd65 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/BinaryConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/BinaryConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/BinaryConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BinaryConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/CacheConfiguration.IgniteAllNodesPredicate.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/CacheConfiguration.IgniteAllNodesPredicate.html
index f16b5ab..880dee9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/CacheConfiguration.IgniteAllNodesPredicate.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/CacheConfiguration.IgniteAllNodesPredicate.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/CacheConfiguration.IgniteAllNodesPredicate.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheConfiguration.IgniteAllNodesPredicate (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/CacheConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/CacheConfiguration.html
index 1ead6dc..3ba0a8a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/CacheConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/CacheConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/CacheConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/CheckpointWriteOrder.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/CheckpointWriteOrder.html
index b0273e5..c70502a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/CheckpointWriteOrder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/CheckpointWriteOrder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/CheckpointWriteOrder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CheckpointWriteOrder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/ClientConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/ClientConfiguration.html
index 22aaaed..d1946c0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/ClientConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/ClientConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/ClientConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClientConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/ClientConnectorConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/ClientConnectorConfiguration.html
index a0409e4..0f790e1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/ClientConnectorConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/ClientConnectorConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/ClientConnectorConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClientConnectorConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/ClientTransactionConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/ClientTransactionConfiguration.html
index d05da4f..8c88fd4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/ClientTransactionConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/ClientTransactionConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/ClientTransactionConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClientTransactionConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/CollectionConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/CollectionConfiguration.html
index 8c5f5a8..af01a3e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/CollectionConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/CollectionConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/CollectionConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CollectionConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/CommunicationFailureContext.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/CommunicationFailureContext.html
index 4310122..b612990 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/CommunicationFailureContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/CommunicationFailureContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/CommunicationFailureContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CommunicationFailureContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/CommunicationFailureResolver.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/CommunicationFailureResolver.html
index bec4d8c..8fc04fc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/CommunicationFailureResolver.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/CommunicationFailureResolver.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/CommunicationFailureResolver.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CommunicationFailureResolver (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/ConnectorConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/ConnectorConfiguration.html
index c3ca8f3..67c83e1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/ConnectorConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/ConnectorConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/ConnectorConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ConnectorConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/ConnectorMessageInterceptor.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/ConnectorMessageInterceptor.html
index d00d8ea..b052d7c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/ConnectorMessageInterceptor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/ConnectorMessageInterceptor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/ConnectorMessageInterceptor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ConnectorMessageInterceptor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/DataPageEvictionMode.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/DataPageEvictionMode.html
index c51edc1..2f67936 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/DataPageEvictionMode.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/DataPageEvictionMode.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/DataPageEvictionMode.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DataPageEvictionMode (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/DataRegionConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/DataRegionConfiguration.html
index ecfecf7..5a3756d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/DataRegionConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/DataRegionConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/DataRegionConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DataRegionConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/DataStorageConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/DataStorageConfiguration.html
index 6ac0338..37face3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/DataStorageConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/DataStorageConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/DataStorageConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DataStorageConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/DefaultCommunicationFailureResolver.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/DefaultCommunicationFailureResolver.html
index 6cdae27..698289c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/DefaultCommunicationFailureResolver.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/DefaultCommunicationFailureResolver.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/DefaultCommunicationFailureResolver.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DefaultCommunicationFailureResolver (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/DeploymentMode.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/DeploymentMode.html
index 014e6cf..7c898cb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/DeploymentMode.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/DeploymentMode.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/DeploymentMode.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DeploymentMode (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/DiskPageCompression.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/DiskPageCompression.html
index 7059acb..48bdcbf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/DiskPageCompression.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/DiskPageCompression.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/DiskPageCompression.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DiskPageCompression (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/ExecutorConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/ExecutorConfiguration.html
index c17a8fc..d19bf0c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/ExecutorConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/ExecutorConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/ExecutorConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ExecutorConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/IgniteConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/IgniteConfiguration.html
index 30e1db5..5dd0778 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/IgniteConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/IgniteConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/IgniteConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/IgniteReflectionFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/IgniteReflectionFactory.html
index 4e21dc7..cb5a86d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/IgniteReflectionFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/IgniteReflectionFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/IgniteReflectionFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteReflectionFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/MemoryConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/MemoryConfiguration.html
index 499f67e..cda22b3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/MemoryConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/MemoryConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/MemoryConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MemoryConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/MemoryPolicyConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/MemoryPolicyConfiguration.html
index 178cc2e..db8d311 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/MemoryPolicyConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/MemoryPolicyConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/MemoryPolicyConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MemoryPolicyConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/NearCacheConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/NearCacheConfiguration.html
index dc0b0da..6cb3a9a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/NearCacheConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/NearCacheConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/NearCacheConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NearCacheConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/OdbcConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/OdbcConfiguration.html
index eaa149a..fd4f3ed 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/OdbcConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/OdbcConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/OdbcConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>OdbcConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/PersistentStoreConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/PersistentStoreConfiguration.html
index 73dd994..4655560 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/PersistentStoreConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/PersistentStoreConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/PersistentStoreConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PersistentStoreConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/PlatformCacheConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/PlatformCacheConfiguration.html
index ec92ab3..8a78e19 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/PlatformCacheConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/PlatformCacheConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/PlatformCacheConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PlatformCacheConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/PlatformConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/PlatformConfiguration.html
index 02b9974..d8dcc52 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/PlatformConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/PlatformConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/PlatformConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PlatformConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/SerializeSeparately.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/SerializeSeparately.html
index 57d593a..374d817 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/SerializeSeparately.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/SerializeSeparately.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/SerializeSeparately.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SerializeSeparately (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/SqlConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/SqlConfiguration.html
index 0710a53..8c9dba3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/SqlConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/SqlConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/SqlConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SqlConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/SqlConnectorConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/SqlConnectorConfiguration.html
index e08f270..797ba91 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/SqlConnectorConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/SqlConnectorConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/SqlConnectorConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SqlConnectorConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/ThinClientConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/ThinClientConfiguration.html
index b5d3155..7575df3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/ThinClientConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/ThinClientConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/ThinClientConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ThinClientConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/TopologyValidator.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/TopologyValidator.html
index 46b72f7..e051038 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/TopologyValidator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/TopologyValidator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/TopologyValidator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TopologyValidator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/TransactionConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/TransactionConfiguration.html
index 95bacf3..f9998bc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/TransactionConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/TransactionConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/TransactionConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TransactionConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/WALMode.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/WALMode.html
index 6a15e7e..bfede29 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/WALMode.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/WALMode.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/WALMode.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>WALMode (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/AddressResolver.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/AddressResolver.html
index 3c6f5c9..2904b1f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/AddressResolver.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/AddressResolver.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/AddressResolver.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.configuration.AddressResolver (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/AtomicConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/AtomicConfiguration.html
index 18d39a3..16bf340 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/AtomicConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/AtomicConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/AtomicConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.configuration.AtomicConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/BasicAddressResolver.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/BasicAddressResolver.html
index e4751b4..f29f427 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/BasicAddressResolver.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/BasicAddressResolver.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/BasicAddressResolver.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.configuration.BasicAddressResolver (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/BinaryConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/BinaryConfiguration.html
index fef94ff..8833ac8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/BinaryConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/BinaryConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/BinaryConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.configuration.BinaryConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/CacheConfiguration.IgniteAllNodesPredicate.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/CacheConfiguration.IgniteAllNodesPredicate.html
index 2d8806c..862d61d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/CacheConfiguration.IgniteAllNodesPredicate.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/CacheConfiguration.IgniteAllNodesPredicate.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/CacheConfiguration.IgniteAllNodesPredicate.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.configuration.CacheConfiguration.IgniteAllNodesPredicate (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/CacheConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/CacheConfiguration.html
index 549a395..320ff1c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/CacheConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/CacheConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/CacheConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.configuration.CacheConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/CheckpointWriteOrder.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/CheckpointWriteOrder.html
index 48834bf..b06838c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/CheckpointWriteOrder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/CheckpointWriteOrder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/CheckpointWriteOrder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.configuration.CheckpointWriteOrder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/ClientConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/ClientConfiguration.html
index 20d98a6..238590d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/ClientConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/ClientConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/ClientConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.configuration.ClientConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/ClientConnectorConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/ClientConnectorConfiguration.html
index e4ba3c3..4bcd0b5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/ClientConnectorConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/ClientConnectorConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/ClientConnectorConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.configuration.ClientConnectorConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/ClientTransactionConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/ClientTransactionConfiguration.html
index 7f731e8..a980aae 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/ClientTransactionConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/ClientTransactionConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/ClientTransactionConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.configuration.ClientTransactionConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/CollectionConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/CollectionConfiguration.html
index 05cdfc4..b991201 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/CollectionConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/CollectionConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/CollectionConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.configuration.CollectionConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/CommunicationFailureContext.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/CommunicationFailureContext.html
index bdff08f..6b830a9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/CommunicationFailureContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/CommunicationFailureContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/CommunicationFailureContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.configuration.CommunicationFailureContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/CommunicationFailureResolver.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/CommunicationFailureResolver.html
index 4dee926..ec565bc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/CommunicationFailureResolver.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/CommunicationFailureResolver.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/CommunicationFailureResolver.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.configuration.CommunicationFailureResolver (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/ConnectorConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/ConnectorConfiguration.html
index 784edd7..a5e9de5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/ConnectorConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/ConnectorConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/ConnectorConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.configuration.ConnectorConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/ConnectorMessageInterceptor.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/ConnectorMessageInterceptor.html
index b8678a1..0e619c4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/ConnectorMessageInterceptor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/ConnectorMessageInterceptor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/ConnectorMessageInterceptor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.configuration.ConnectorMessageInterceptor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/DataPageEvictionMode.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/DataPageEvictionMode.html
index 959d1ce..9db7220 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/DataPageEvictionMode.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/DataPageEvictionMode.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/DataPageEvictionMode.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.configuration.DataPageEvictionMode (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/DataRegionConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/DataRegionConfiguration.html
index 4603285..935caa9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/DataRegionConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/DataRegionConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/DataRegionConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.configuration.DataRegionConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/DataStorageConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/DataStorageConfiguration.html
index b7001f9..62b967e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/DataStorageConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/DataStorageConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/DataStorageConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.configuration.DataStorageConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/DefaultCommunicationFailureResolver.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/DefaultCommunicationFailureResolver.html
index 9622018..2818bdf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/DefaultCommunicationFailureResolver.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/DefaultCommunicationFailureResolver.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/DefaultCommunicationFailureResolver.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.configuration.DefaultCommunicationFailureResolver (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/DeploymentMode.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/DeploymentMode.html
index 9fedecd..df61d3f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/DeploymentMode.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/DeploymentMode.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/DeploymentMode.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.configuration.DeploymentMode (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/DiskPageCompression.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/DiskPageCompression.html
index cf36a9a..abdf6a8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/DiskPageCompression.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/DiskPageCompression.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/DiskPageCompression.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.configuration.DiskPageCompression (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/ExecutorConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/ExecutorConfiguration.html
index aaa0772..12339ee 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/ExecutorConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/ExecutorConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/ExecutorConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.configuration.ExecutorConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/IgniteConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/IgniteConfiguration.html
index eef168f..2b0286b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/IgniteConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/IgniteConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/IgniteConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.configuration.IgniteConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/IgniteReflectionFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/IgniteReflectionFactory.html
index 45b7a2f..d12ff68 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/IgniteReflectionFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/IgniteReflectionFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/IgniteReflectionFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.configuration.IgniteReflectionFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/MemoryConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/MemoryConfiguration.html
index 6dda285..7402ed3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/MemoryConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/MemoryConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/MemoryConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.configuration.MemoryConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/MemoryPolicyConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/MemoryPolicyConfiguration.html
index a1196b1..00ddc39 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/MemoryPolicyConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/MemoryPolicyConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/MemoryPolicyConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.configuration.MemoryPolicyConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/NearCacheConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/NearCacheConfiguration.html
index f9fdf5f..42e32e9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/NearCacheConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/NearCacheConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/NearCacheConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.configuration.NearCacheConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/OdbcConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/OdbcConfiguration.html
index 2976d90..7dfd58b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/OdbcConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/OdbcConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/OdbcConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.configuration.OdbcConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/PersistentStoreConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/PersistentStoreConfiguration.html
index e0f0108..8d0b7fc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/PersistentStoreConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/PersistentStoreConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/PersistentStoreConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.configuration.PersistentStoreConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/PlatformCacheConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/PlatformCacheConfiguration.html
index c3ed4ad..ec87f48 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/PlatformCacheConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/PlatformCacheConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/PlatformCacheConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.configuration.PlatformCacheConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/PlatformConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/PlatformConfiguration.html
index e1a04c3..d98f588 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/PlatformConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/PlatformConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/PlatformConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.configuration.PlatformConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/SerializeSeparately.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/SerializeSeparately.html
index a608fab..45a02b2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/SerializeSeparately.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/SerializeSeparately.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/SerializeSeparately.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.configuration.SerializeSeparately (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/SqlConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/SqlConfiguration.html
index e8946a4..1509db3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/SqlConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/SqlConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/SqlConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.configuration.SqlConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/SqlConnectorConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/SqlConnectorConfiguration.html
index a12f972..c1b633d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/SqlConnectorConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/SqlConnectorConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/SqlConnectorConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.configuration.SqlConnectorConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/ThinClientConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/ThinClientConfiguration.html
index 42d9d45..874cea4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/ThinClientConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/ThinClientConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/ThinClientConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.configuration.ThinClientConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/TopologyValidator.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/TopologyValidator.html
index ad8d271..3d5d0d2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/TopologyValidator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/TopologyValidator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/TopologyValidator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.configuration.TopologyValidator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/TransactionConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/TransactionConfiguration.html
index 0f81ce5..0d92769 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/TransactionConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/TransactionConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/TransactionConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.configuration.TransactionConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/WALMode.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/WALMode.html
index d230d2c..a06210b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/WALMode.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/class-use/WALMode.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/class-use/WALMode.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.configuration.WALMode (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/package-frame.html
index 7fdf9db..738bcef 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.configuration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/package-summary.html
index 021c6d7..9e4d508 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.configuration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/package-tree.html
index 65493c3..4a4da79 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.configuration Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/configuration/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/configuration/package-use.html
index 0e644a1..4c92fcf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/configuration/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/configuration/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.configuration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/development/utils/IgniteWalConverter.html b/releases/2.9.1/javadoc/org/apache/ignite/development/utils/IgniteWalConverter.html
index 8e9689d..d8a62ac 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/development/utils/IgniteWalConverter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/development/utils/IgniteWalConverter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/development/utils/IgniteWalConverter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteWalConverter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/development/utils/RecordSizeCountStat.html b/releases/2.9.1/javadoc/org/apache/ignite/development/utils/RecordSizeCountStat.html
index d138973..a2801ce 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/development/utils/RecordSizeCountStat.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/development/utils/RecordSizeCountStat.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/development/utils/RecordSizeCountStat.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>RecordSizeCountStat (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/development/utils/TxWalStat.html b/releases/2.9.1/javadoc/org/apache/ignite/development/utils/TxWalStat.html
index 46f6282..0715e5c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/development/utils/TxWalStat.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/development/utils/TxWalStat.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/development/utils/TxWalStat.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TxWalStat (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/development/utils/WalStat.html b/releases/2.9.1/javadoc/org/apache/ignite/development/utils/WalStat.html
index 39a36a2..82cb1b4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/development/utils/WalStat.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/development/utils/WalStat.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/development/utils/WalStat.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>WalStat (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/development/utils/class-use/IgniteWalConverter.html b/releases/2.9.1/javadoc/org/apache/ignite/development/utils/class-use/IgniteWalConverter.html
index d6e0256..9f3a88e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/development/utils/class-use/IgniteWalConverter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/development/utils/class-use/IgniteWalConverter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/development/utils/class-use/IgniteWalConverter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.development.utils.IgniteWalConverter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/development/utils/class-use/RecordSizeCountStat.html b/releases/2.9.1/javadoc/org/apache/ignite/development/utils/class-use/RecordSizeCountStat.html
index 88a0e8a..2b662b3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/development/utils/class-use/RecordSizeCountStat.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/development/utils/class-use/RecordSizeCountStat.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/development/utils/class-use/RecordSizeCountStat.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.development.utils.RecordSizeCountStat (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/development/utils/class-use/TxWalStat.html b/releases/2.9.1/javadoc/org/apache/ignite/development/utils/class-use/TxWalStat.html
index f8beaca..e65f143 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/development/utils/class-use/TxWalStat.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/development/utils/class-use/TxWalStat.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/development/utils/class-use/TxWalStat.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.development.utils.TxWalStat (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/development/utils/class-use/WalStat.html b/releases/2.9.1/javadoc/org/apache/ignite/development/utils/class-use/WalStat.html
index a700de7..8bbf303 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/development/utils/class-use/WalStat.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/development/utils/class-use/WalStat.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/development/utils/class-use/WalStat.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.development.utils.WalStat (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/development/utils/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/development/utils/package-frame.html
index ffae79f..a4c849e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/development/utils/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/development/utils/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/development/utils/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.development.utils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/development/utils/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/development/utils/package-summary.html
index 4191500..891794f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/development/utils/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/development/utils/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/development/utils/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.development.utils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/development/utils/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/development/utils/package-tree.html
index 1b46dcb..36bc761 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/development/utils/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/development/utils/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/development/utils/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.development.utils Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/development/utils/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/development/utils/package-use.html
index e621199..b4f0d36 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/development/utils/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/development/utils/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/development/utils/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.development.utils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/BaselineChangedEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/BaselineChangedEvent.html
index cdeaec0..6e7489e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/BaselineChangedEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/BaselineChangedEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/BaselineChangedEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BaselineChangedEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/BaselineConfigurationChangedEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/BaselineConfigurationChangedEvent.html
index eff00f9..00dad6f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/BaselineConfigurationChangedEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/BaselineConfigurationChangedEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/BaselineConfigurationChangedEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BaselineConfigurationChangedEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/CacheConsistencyViolationEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/CacheConsistencyViolationEvent.html
index b9da3be..0746dd6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/CacheConsistencyViolationEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/CacheConsistencyViolationEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/CacheConsistencyViolationEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheConsistencyViolationEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/CacheEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/CacheEvent.html
index e4c8cf5..c196409 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/CacheEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/CacheEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/CacheEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/CacheQueryExecutedEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/CacheQueryExecutedEvent.html
index 996cf5c..04cd84b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/CacheQueryExecutedEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/CacheQueryExecutedEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/CacheQueryExecutedEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheQueryExecutedEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/CacheQueryReadEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/CacheQueryReadEvent.html
index 8a642f8..79fc5e5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/CacheQueryReadEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/CacheQueryReadEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/CacheQueryReadEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheQueryReadEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/CacheRebalancingEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/CacheRebalancingEvent.html
index 755a737..e837180 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/CacheRebalancingEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/CacheRebalancingEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/CacheRebalancingEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheRebalancingEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/CheckpointEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/CheckpointEvent.html
index 64fd16d..e190a11 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/CheckpointEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/CheckpointEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/CheckpointEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CheckpointEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/ClusterActivationEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/ClusterActivationEvent.html
index 55a002a..f2a66b2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/ClusterActivationEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/ClusterActivationEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/ClusterActivationEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClusterActivationEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/ClusterStateChangeEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/ClusterStateChangeEvent.html
index 7a29515..4345649 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/ClusterStateChangeEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/ClusterStateChangeEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/ClusterStateChangeEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClusterStateChangeEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/ClusterStateChangeStartedEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/ClusterStateChangeStartedEvent.html
index 67ef084..ce9c14c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/ClusterStateChangeStartedEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/ClusterStateChangeStartedEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/ClusterStateChangeStartedEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClusterStateChangeStartedEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/ClusterTagUpdatedEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/ClusterTagUpdatedEvent.html
index ab9aeed..43ef97a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/ClusterTagUpdatedEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/ClusterTagUpdatedEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/ClusterTagUpdatedEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClusterTagUpdatedEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/DeploymentEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/DeploymentEvent.html
index cad8bff..46ab9c1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/DeploymentEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/DeploymentEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/DeploymentEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DeploymentEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/DiscoveryEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/DiscoveryEvent.html
index 071d7f3..251812a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/DiscoveryEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/DiscoveryEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/DiscoveryEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DiscoveryEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/Event.html b/releases/2.9.1/javadoc/org/apache/ignite/events/Event.html
index 17194f8..7f9cf57 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/Event.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/Event.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/Event.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Event (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/EventAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/events/EventAdapter.html
index 531e6c6..f2799e7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/EventAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/EventAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/EventAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>EventAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/EventType.html b/releases/2.9.1/javadoc/org/apache/ignite/events/EventType.html
index e5a9ebb..265d1b2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/EventType.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/EventType.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/EventType.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>EventType (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/JobEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/JobEvent.html
index 99a12da..1fc025b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/JobEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/JobEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/JobEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>JobEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/PageReplacementStartedEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/PageReplacementStartedEvent.html
index 48a734d..2492be8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/PageReplacementStartedEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/PageReplacementStartedEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/PageReplacementStartedEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PageReplacementStartedEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/TaskEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/TaskEvent.html
index ede6737..b523948 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/TaskEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/TaskEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/TaskEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TaskEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/TransactionStateChangedEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/TransactionStateChangedEvent.html
index dbdadaa..b340c4e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/TransactionStateChangedEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/TransactionStateChangedEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/TransactionStateChangedEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TransactionStateChangedEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/WalSegmentArchivedEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/WalSegmentArchivedEvent.html
index 18b3909..560d20c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/WalSegmentArchivedEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/WalSegmentArchivedEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/WalSegmentArchivedEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>WalSegmentArchivedEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/WalSegmentCompactedEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/WalSegmentCompactedEvent.html
index ab48aad..bb47448 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/WalSegmentCompactedEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/WalSegmentCompactedEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/WalSegmentCompactedEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>WalSegmentCompactedEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/BaselineChangedEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/BaselineChangedEvent.html
index c5261b2..c75db75 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/BaselineChangedEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/BaselineChangedEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/class-use/BaselineChangedEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.events.BaselineChangedEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/BaselineConfigurationChangedEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/BaselineConfigurationChangedEvent.html
index 9905a19..19ee86d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/BaselineConfigurationChangedEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/BaselineConfigurationChangedEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/class-use/BaselineConfigurationChangedEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.events.BaselineConfigurationChangedEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/CacheConsistencyViolationEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/CacheConsistencyViolationEvent.html
index 93cf94f..27067d6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/CacheConsistencyViolationEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/CacheConsistencyViolationEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/class-use/CacheConsistencyViolationEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.events.CacheConsistencyViolationEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/CacheEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/CacheEvent.html
index 8990973..bc18c50 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/CacheEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/CacheEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/class-use/CacheEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.events.CacheEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/CacheQueryExecutedEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/CacheQueryExecutedEvent.html
index 31e301c..4263532 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/CacheQueryExecutedEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/CacheQueryExecutedEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/class-use/CacheQueryExecutedEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.events.CacheQueryExecutedEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/CacheQueryReadEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/CacheQueryReadEvent.html
index a4a8544..ff0d73b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/CacheQueryReadEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/CacheQueryReadEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/class-use/CacheQueryReadEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.events.CacheQueryReadEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/CacheRebalancingEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/CacheRebalancingEvent.html
index a5c59fb..3edc84a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/CacheRebalancingEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/CacheRebalancingEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/class-use/CacheRebalancingEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.events.CacheRebalancingEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/CheckpointEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/CheckpointEvent.html
index cf61851..9c81ccd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/CheckpointEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/CheckpointEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/class-use/CheckpointEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.events.CheckpointEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/ClusterActivationEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/ClusterActivationEvent.html
index 89bd575..b310411 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/ClusterActivationEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/ClusterActivationEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/class-use/ClusterActivationEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.events.ClusterActivationEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/ClusterStateChangeEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/ClusterStateChangeEvent.html
index 3c60812..ba4eff6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/ClusterStateChangeEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/ClusterStateChangeEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/class-use/ClusterStateChangeEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.events.ClusterStateChangeEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/ClusterStateChangeStartedEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/ClusterStateChangeStartedEvent.html
index ebdc2a3..526e478 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/ClusterStateChangeStartedEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/ClusterStateChangeStartedEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/class-use/ClusterStateChangeStartedEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.events.ClusterStateChangeStartedEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/ClusterTagUpdatedEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/ClusterTagUpdatedEvent.html
index bdf277a..d4912bd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/ClusterTagUpdatedEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/ClusterTagUpdatedEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/class-use/ClusterTagUpdatedEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.events.ClusterTagUpdatedEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/DeploymentEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/DeploymentEvent.html
index ca9ad5a..066a7ba 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/DeploymentEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/DeploymentEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/class-use/DeploymentEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.events.DeploymentEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/DiscoveryEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/DiscoveryEvent.html
index e0ec81b..bf21c41 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/DiscoveryEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/DiscoveryEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/class-use/DiscoveryEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.events.DiscoveryEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/Event.html b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/Event.html
index 74ba351..30608aa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/Event.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/Event.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/class-use/Event.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.events.Event (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/EventAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/EventAdapter.html
index 877cff0..6e22821 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/EventAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/EventAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/class-use/EventAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.events.EventAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/EventType.html b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/EventType.html
index 72ab679..5b8d652 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/EventType.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/EventType.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/class-use/EventType.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.events.EventType (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/JobEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/JobEvent.html
index 5b37a46..8df076d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/JobEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/JobEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/class-use/JobEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.events.JobEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/PageReplacementStartedEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/PageReplacementStartedEvent.html
index 1217bc4..54ea3f2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/PageReplacementStartedEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/PageReplacementStartedEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/class-use/PageReplacementStartedEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.events.PageReplacementStartedEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/TaskEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/TaskEvent.html
index 9cb0bf7..fe1e562 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/TaskEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/TaskEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/class-use/TaskEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.events.TaskEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/TransactionStateChangedEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/TransactionStateChangedEvent.html
index c5b6341..c1f3ea1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/TransactionStateChangedEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/TransactionStateChangedEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/class-use/TransactionStateChangedEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.events.TransactionStateChangedEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/WalSegmentArchivedEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/WalSegmentArchivedEvent.html
index 90fa3cd..5ad437e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/WalSegmentArchivedEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/WalSegmentArchivedEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/class-use/WalSegmentArchivedEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.events.WalSegmentArchivedEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/WalSegmentCompactedEvent.html b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/WalSegmentCompactedEvent.html
index 5a3be45..5d1757b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/WalSegmentCompactedEvent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/class-use/WalSegmentCompactedEvent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/class-use/WalSegmentCompactedEvent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.events.WalSegmentCompactedEvent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/events/package-frame.html
index de0e7c3..720be53 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.events (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/events/package-summary.html
index d4e4fd0..019c29c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.events (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/events/package-tree.html
index 37d1585..412cc54 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.events Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/events/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/events/package-use.html
index 8414ac8..1e7aa5b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/events/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/events/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/events/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.events (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/failure/AbstractFailureHandler.html b/releases/2.9.1/javadoc/org/apache/ignite/failure/AbstractFailureHandler.html
index 085a507..83c2481 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/failure/AbstractFailureHandler.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/failure/AbstractFailureHandler.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/failure/AbstractFailureHandler.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:04 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>AbstractFailureHandler (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/failure/FailureContext.html b/releases/2.9.1/javadoc/org/apache/ignite/failure/FailureContext.html
index 17ad81b..c69497a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/failure/FailureContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/failure/FailureContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/failure/FailureContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:04 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>FailureContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/failure/FailureHandler.html b/releases/2.9.1/javadoc/org/apache/ignite/failure/FailureHandler.html
index c9bed82..9817723 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/failure/FailureHandler.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/failure/FailureHandler.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/failure/FailureHandler.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:04 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>FailureHandler (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/failure/FailureType.html b/releases/2.9.1/javadoc/org/apache/ignite/failure/FailureType.html
index 0f670b5..38d513c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/failure/FailureType.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/failure/FailureType.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/failure/FailureType.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:04 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>FailureType (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/failure/NoOpFailureHandler.html b/releases/2.9.1/javadoc/org/apache/ignite/failure/NoOpFailureHandler.html
index 8af49b2..e964f1c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/failure/NoOpFailureHandler.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/failure/NoOpFailureHandler.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/failure/NoOpFailureHandler.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:04 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NoOpFailureHandler (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/failure/RestartProcessFailureHandler.html b/releases/2.9.1/javadoc/org/apache/ignite/failure/RestartProcessFailureHandler.html
index c40614dd..be271de 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/failure/RestartProcessFailureHandler.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/failure/RestartProcessFailureHandler.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/failure/RestartProcessFailureHandler.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:04 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>RestartProcessFailureHandler (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/failure/StopNodeFailureHandler.html b/releases/2.9.1/javadoc/org/apache/ignite/failure/StopNodeFailureHandler.html
index 4e2e7fc..d566253 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/failure/StopNodeFailureHandler.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/failure/StopNodeFailureHandler.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/failure/StopNodeFailureHandler.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:04 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>StopNodeFailureHandler (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/failure/StopNodeOrHaltFailureHandler.html b/releases/2.9.1/javadoc/org/apache/ignite/failure/StopNodeOrHaltFailureHandler.html
index c97c615..cafefcc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/failure/StopNodeOrHaltFailureHandler.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/failure/StopNodeOrHaltFailureHandler.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/failure/StopNodeOrHaltFailureHandler.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:04 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>StopNodeOrHaltFailureHandler (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/failure/class-use/AbstractFailureHandler.html b/releases/2.9.1/javadoc/org/apache/ignite/failure/class-use/AbstractFailureHandler.html
index edfdf93..a6821c5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/failure/class-use/AbstractFailureHandler.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/failure/class-use/AbstractFailureHandler.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/failure/class-use/AbstractFailureHandler.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.failure.AbstractFailureHandler (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/failure/class-use/FailureContext.html b/releases/2.9.1/javadoc/org/apache/ignite/failure/class-use/FailureContext.html
index fcb6d6a..c2b86bf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/failure/class-use/FailureContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/failure/class-use/FailureContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/failure/class-use/FailureContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.failure.FailureContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/failure/class-use/FailureHandler.html b/releases/2.9.1/javadoc/org/apache/ignite/failure/class-use/FailureHandler.html
index 22b34b1..07ed3b0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/failure/class-use/FailureHandler.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/failure/class-use/FailureHandler.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/failure/class-use/FailureHandler.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.failure.FailureHandler (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/failure/class-use/FailureType.html b/releases/2.9.1/javadoc/org/apache/ignite/failure/class-use/FailureType.html
index 54d00fd..df40e4e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/failure/class-use/FailureType.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/failure/class-use/FailureType.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/failure/class-use/FailureType.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.failure.FailureType (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/failure/class-use/NoOpFailureHandler.html b/releases/2.9.1/javadoc/org/apache/ignite/failure/class-use/NoOpFailureHandler.html
index f398ebe..93f32ca 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/failure/class-use/NoOpFailureHandler.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/failure/class-use/NoOpFailureHandler.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/failure/class-use/NoOpFailureHandler.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.failure.NoOpFailureHandler (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/failure/class-use/RestartProcessFailureHandler.html b/releases/2.9.1/javadoc/org/apache/ignite/failure/class-use/RestartProcessFailureHandler.html
index d0c33b0..91af4e2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/failure/class-use/RestartProcessFailureHandler.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/failure/class-use/RestartProcessFailureHandler.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/failure/class-use/RestartProcessFailureHandler.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.failure.RestartProcessFailureHandler (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/failure/class-use/StopNodeFailureHandler.html b/releases/2.9.1/javadoc/org/apache/ignite/failure/class-use/StopNodeFailureHandler.html
index 1de21ea..a6c0b42 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/failure/class-use/StopNodeFailureHandler.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/failure/class-use/StopNodeFailureHandler.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/failure/class-use/StopNodeFailureHandler.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.failure.StopNodeFailureHandler (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/failure/class-use/StopNodeOrHaltFailureHandler.html b/releases/2.9.1/javadoc/org/apache/ignite/failure/class-use/StopNodeOrHaltFailureHandler.html
index 3b23974..01e82bf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/failure/class-use/StopNodeOrHaltFailureHandler.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/failure/class-use/StopNodeOrHaltFailureHandler.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/failure/class-use/StopNodeOrHaltFailureHandler.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.failure.StopNodeOrHaltFailureHandler (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/failure/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/failure/package-frame.html
index 9ecb6ea..af5de22 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/failure/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/failure/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/failure/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.failure (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/failure/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/failure/package-summary.html
index dd82b4b..cd572cf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/failure/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/failure/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/failure/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.failure (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/failure/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/failure/package-tree.html
index 69ca2dd..afeb32f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/failure/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/failure/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/failure/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.failure Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/failure/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/failure/package-use.html
index dffb57e..efdf948 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/failure/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/failure/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/failure/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.failure (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteAsyncCallback.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteAsyncCallback.html
index 3c3f22f..f2fa218 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteAsyncCallback.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteAsyncCallback.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/IgniteAsyncCallback.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteAsyncCallback (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteAsyncSupport.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteAsyncSupport.html
index d23c139..1a2a93f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteAsyncSupport.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteAsyncSupport.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/IgniteAsyncSupport.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteAsyncSupport (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteAsyncSupported.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteAsyncSupported.html
index 76ad7d2..5f5bad3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteAsyncSupported.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteAsyncSupported.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/IgniteAsyncSupported.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteAsyncSupported (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteBiClosure.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteBiClosure.html
index 1cf8b92..feda259 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteBiClosure.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteBiClosure.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/IgniteBiClosure.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteBiClosure (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteBiInClosure.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteBiInClosure.html
index 239421f..30bac6c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteBiInClosure.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteBiInClosure.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/IgniteBiInClosure.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteBiInClosure (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteBiPredicate.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteBiPredicate.html
index 15feece..ee86152 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteBiPredicate.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteBiPredicate.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/IgniteBiPredicate.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteBiPredicate (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteBiTuple.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteBiTuple.html
index 4b8becd..92a7f0b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteBiTuple.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteBiTuple.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/IgniteBiTuple.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteBiTuple (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteCallable.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteCallable.html
index 2debcdc..fd984d5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteCallable.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteCallable.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/IgniteCallable.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteCallable (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteClosure.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteClosure.html
index 2d15f23..3be9bdb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteClosure.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteClosure.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/IgniteClosure.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteClosure (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteExperimental.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteExperimental.html
index 5de96eb..92a9fc0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteExperimental.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteExperimental.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/IgniteExperimental.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteExperimental (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteFuture.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteFuture.html
index 6158e69..d36c484 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteFuture.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteFuture.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/IgniteFuture.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteFuture (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteFutureCancelledException.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteFutureCancelledException.html
index 5d72b31..c1773d9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteFutureCancelledException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteFutureCancelledException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/IgniteFutureCancelledException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteFutureCancelledException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteFutureTimeoutException.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteFutureTimeoutException.html
index 4a5e74f..7dd9ff4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteFutureTimeoutException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteFutureTimeoutException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/IgniteFutureTimeoutException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteFutureTimeoutException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteInClosure.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteInClosure.html
index 4e6ba2a..99a5c18 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteInClosure.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteInClosure.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/IgniteInClosure.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteInClosure (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteNotPeerDeployable.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteNotPeerDeployable.html
index bc091c2..b093822 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteNotPeerDeployable.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteNotPeerDeployable.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/IgniteNotPeerDeployable.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteNotPeerDeployable (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteOutClosure.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteOutClosure.html
index 4355b04..c83371b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteOutClosure.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteOutClosure.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/IgniteOutClosure.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteOutClosure (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgnitePredicate.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgnitePredicate.html
index ac23e53..9db4e95 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgnitePredicate.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgnitePredicate.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/IgnitePredicate.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgnitePredicate (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteProductVersion.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteProductVersion.html
index 99cc129..a7cee60 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteProductVersion.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteProductVersion.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/IgniteProductVersion.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteProductVersion (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteReducer.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteReducer.html
index 70c8b5e..55a1b00 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteReducer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteReducer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/IgniteReducer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteReducer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteRunnable.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteRunnable.html
index f3f7e83..440c07c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteRunnable.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteRunnable.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/IgniteRunnable.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteRunnable (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteUuid.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteUuid.html
index 56861c7..e3913cf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteUuid.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/IgniteUuid.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/IgniteUuid.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteUuid (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteAsyncCallback.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteAsyncCallback.html
index fb44044..0cf9ac7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteAsyncCallback.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteAsyncCallback.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/class-use/IgniteAsyncCallback.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.lang.IgniteAsyncCallback (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteAsyncSupport.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteAsyncSupport.html
index 141add1..b4d9ccf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteAsyncSupport.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteAsyncSupport.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/class-use/IgniteAsyncSupport.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.lang.IgniteAsyncSupport (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteAsyncSupported.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteAsyncSupported.html
index 1d52e50..63a5a2a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteAsyncSupported.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteAsyncSupported.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/class-use/IgniteAsyncSupported.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.lang.IgniteAsyncSupported (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteBiClosure.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteBiClosure.html
index 5b47e67..50c2869 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteBiClosure.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteBiClosure.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/class-use/IgniteBiClosure.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.lang.IgniteBiClosure (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteBiInClosure.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteBiInClosure.html
index 2b34d91..ce93cfe 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteBiInClosure.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteBiInClosure.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/class-use/IgniteBiInClosure.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.lang.IgniteBiInClosure (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteBiPredicate.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteBiPredicate.html
index 7f3f0c2..8ae78e6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteBiPredicate.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteBiPredicate.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/class-use/IgniteBiPredicate.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.lang.IgniteBiPredicate (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteBiTuple.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteBiTuple.html
index 2880e62..bdc823a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteBiTuple.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteBiTuple.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/class-use/IgniteBiTuple.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.lang.IgniteBiTuple (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteCallable.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteCallable.html
index 7c553d5..c2a2636 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteCallable.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteCallable.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/class-use/IgniteCallable.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.lang.IgniteCallable (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteClosure.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteClosure.html
index 2c1bdfe..8f36634 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteClosure.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteClosure.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/class-use/IgniteClosure.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.lang.IgniteClosure (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteExperimental.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteExperimental.html
index 0f41703..e30496d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteExperimental.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteExperimental.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/class-use/IgniteExperimental.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.lang.IgniteExperimental (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteFuture.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteFuture.html
index 06534ea..cbb902e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteFuture.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteFuture.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/class-use/IgniteFuture.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.lang.IgniteFuture (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteFutureCancelledException.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteFutureCancelledException.html
index a4a3348..68c66e9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteFutureCancelledException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteFutureCancelledException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/class-use/IgniteFutureCancelledException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.lang.IgniteFutureCancelledException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteFutureTimeoutException.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteFutureTimeoutException.html
index 4377b48..c453235 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteFutureTimeoutException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteFutureTimeoutException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/class-use/IgniteFutureTimeoutException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.lang.IgniteFutureTimeoutException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteInClosure.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteInClosure.html
index 92b4389..4f02c4f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteInClosure.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteInClosure.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/class-use/IgniteInClosure.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.lang.IgniteInClosure (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteNotPeerDeployable.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteNotPeerDeployable.html
index f6c6594..bba44d1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteNotPeerDeployable.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteNotPeerDeployable.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/class-use/IgniteNotPeerDeployable.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.lang.IgniteNotPeerDeployable (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteOutClosure.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteOutClosure.html
index f30bf6d..681af8b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteOutClosure.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteOutClosure.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/class-use/IgniteOutClosure.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.lang.IgniteOutClosure (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgnitePredicate.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgnitePredicate.html
index ab1772e..1bcef01 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgnitePredicate.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgnitePredicate.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/class-use/IgnitePredicate.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.lang.IgnitePredicate (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteProductVersion.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteProductVersion.html
index 26d8e8b..a75b489 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteProductVersion.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteProductVersion.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/class-use/IgniteProductVersion.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.lang.IgniteProductVersion (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteReducer.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteReducer.html
index b5f8d00..f6929f8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteReducer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteReducer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/class-use/IgniteReducer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.lang.IgniteReducer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteRunnable.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteRunnable.html
index c3c3c9b..32f705f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteRunnable.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteRunnable.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/class-use/IgniteRunnable.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.lang.IgniteRunnable (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteUuid.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteUuid.html
index d36e922..1ef07bc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteUuid.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/class-use/IgniteUuid.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/class-use/IgniteUuid.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.lang.IgniteUuid (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/package-frame.html
index 10f5991..94a1856 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.lang (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/package-summary.html
index 2857152..3ed3efd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.lang (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/package-tree.html
index 41f36c6..1846fba 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.lang Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lang/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/lang/package-use.html
index b0c0030..1a59f7f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lang/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lang/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lang/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.lang (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/LifecycleAware.html b/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/LifecycleAware.html
index 8a4baa5..0879622 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/LifecycleAware.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/LifecycleAware.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lifecycle/LifecycleAware.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LifecycleAware (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/LifecycleBean.html b/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/LifecycleBean.html
index 84fddb7..a7d3fe9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/LifecycleBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/LifecycleBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lifecycle/LifecycleBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LifecycleBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/LifecycleEventType.html b/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/LifecycleEventType.html
index 175ee88..610d425 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/LifecycleEventType.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/LifecycleEventType.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lifecycle/LifecycleEventType.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LifecycleEventType (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/class-use/LifecycleAware.html b/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/class-use/LifecycleAware.html
index 905f205..be53c3e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/class-use/LifecycleAware.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/class-use/LifecycleAware.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lifecycle/class-use/LifecycleAware.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.lifecycle.LifecycleAware (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/class-use/LifecycleBean.html b/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/class-use/LifecycleBean.html
index defd100..ea82e21 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/class-use/LifecycleBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/class-use/LifecycleBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lifecycle/class-use/LifecycleBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.lifecycle.LifecycleBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/class-use/LifecycleEventType.html b/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/class-use/LifecycleEventType.html
index e499f92..a81148c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/class-use/LifecycleEventType.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/class-use/LifecycleEventType.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lifecycle/class-use/LifecycleEventType.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.lifecycle.LifecycleEventType (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/package-frame.html
index ef58377..f4165ea 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lifecycle/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.lifecycle (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/package-summary.html
index e069201..76e57f4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lifecycle/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.lifecycle (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/package-tree.html
index 762a559..67b2d4e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lifecycle/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.lifecycle Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/package-use.html
index 1797eea..4438b5b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/lifecycle/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/lifecycle/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.lifecycle (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/LoggerNodeIdAware.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/LoggerNodeIdAware.html
index 949af5a..6f60386 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/LoggerNodeIdAware.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/LoggerNodeIdAware.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/LoggerNodeIdAware.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LoggerNodeIdAware (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/NullLogger.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/NullLogger.html
index d4e26ae..a321967 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/NullLogger.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/NullLogger.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/NullLogger.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NullLogger (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/class-use/LoggerNodeIdAware.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/class-use/LoggerNodeIdAware.html
index 17c9469..02d76eb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/class-use/LoggerNodeIdAware.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/class-use/LoggerNodeIdAware.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/class-use/LoggerNodeIdAware.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.logger.LoggerNodeIdAware (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/class-use/NullLogger.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/class-use/NullLogger.html
index d2faeb5..a2a46ec 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/class-use/NullLogger.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/class-use/NullLogger.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/class-use/NullLogger.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.logger.NullLogger (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/java/JavaLogger.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/java/JavaLogger.html
index d8ac62d..f3e32c3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/java/JavaLogger.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/java/JavaLogger.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/java/JavaLogger.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>JavaLogger (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/java/JavaLoggerFileHandler.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/java/JavaLoggerFileHandler.html
index f084413..1c58daa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/java/JavaLoggerFileHandler.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/java/JavaLoggerFileHandler.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/java/JavaLoggerFileHandler.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>JavaLoggerFileHandler (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/java/JavaLoggerFormatter.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/java/JavaLoggerFormatter.html
index de7ee8f..4971204 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/java/JavaLoggerFormatter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/java/JavaLoggerFormatter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/java/JavaLoggerFormatter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>JavaLoggerFormatter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/java/class-use/JavaLogger.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/java/class-use/JavaLogger.html
index e5e95f2..9f54d4b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/java/class-use/JavaLogger.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/java/class-use/JavaLogger.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/java/class-use/JavaLogger.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.logger.java.JavaLogger (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/java/class-use/JavaLoggerFileHandler.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/java/class-use/JavaLoggerFileHandler.html
index 2064d39..69caa84 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/java/class-use/JavaLoggerFileHandler.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/java/class-use/JavaLoggerFileHandler.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/java/class-use/JavaLoggerFileHandler.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.logger.java.JavaLoggerFileHandler (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/java/class-use/JavaLoggerFormatter.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/java/class-use/JavaLoggerFormatter.html
index b8996b5..0156b70 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/java/class-use/JavaLoggerFormatter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/java/class-use/JavaLoggerFormatter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/java/class-use/JavaLoggerFormatter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.logger.java.JavaLoggerFormatter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/java/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/java/package-frame.html
index b3a7ff0..03f0fe1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/java/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/java/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/java/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.logger.java (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/java/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/java/package-summary.html
index 96aaf08..f9b5b35 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/java/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/java/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/java/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.logger.java (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/java/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/java/package-tree.html
index ef76d04..37e81ea 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/java/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/java/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/java/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.logger.java Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/java/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/java/package-use.html
index 788f7c2..a4d1d60 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/java/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/java/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/java/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.logger.java (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/jcl/JclLogger.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/jcl/JclLogger.html
index f0dd9ae..b2caab2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/jcl/JclLogger.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/jcl/JclLogger.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/jcl/JclLogger.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>JclLogger (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/jcl/class-use/JclLogger.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/jcl/class-use/JclLogger.html
index c48cd58..fc1dc6a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/jcl/class-use/JclLogger.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/jcl/class-use/JclLogger.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/jcl/class-use/JclLogger.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.logger.jcl.JclLogger (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/jcl/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/jcl/package-frame.html
index c6d6db5..a14c52e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/jcl/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/jcl/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/jcl/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.logger.jcl (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/jcl/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/jcl/package-summary.html
index 52d132e..603f34f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/jcl/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/jcl/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/jcl/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.logger.jcl (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/jcl/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/jcl/package-tree.html
index bd00b85..3537088 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/jcl/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/jcl/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/jcl/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.logger.jcl Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/jcl/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/jcl/package-use.html
index f4d701a..fe86b7a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/jcl/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/jcl/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/jcl/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.logger.jcl (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/Log4JDailyRollingFileAppender.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/Log4JDailyRollingFileAppender.html
index ab57218..7ce469d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/Log4JDailyRollingFileAppender.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/Log4JDailyRollingFileAppender.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/log4j/Log4JDailyRollingFileAppender.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Log4JDailyRollingFileAppender (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/Log4JExternallyRolledFileAppender.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/Log4JExternallyRolledFileAppender.html
index 50a1645..29c6ba3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/Log4JExternallyRolledFileAppender.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/Log4JExternallyRolledFileAppender.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/log4j/Log4JExternallyRolledFileAppender.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Log4JExternallyRolledFileAppender (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/Log4JFileAppender.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/Log4JFileAppender.html
index a22da50..ce8efc1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/Log4JFileAppender.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/Log4JFileAppender.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/log4j/Log4JFileAppender.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Log4JFileAppender (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/Log4JLogger.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/Log4JLogger.html
index ca4ff88..b39aee3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/Log4JLogger.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/Log4JLogger.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/log4j/Log4JLogger.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Log4JLogger (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/Log4jRollingFileAppender.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/Log4jRollingFileAppender.html
index 49ee47e..7b93df9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/Log4jRollingFileAppender.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/Log4jRollingFileAppender.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/log4j/Log4jRollingFileAppender.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Log4jRollingFileAppender (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/class-use/Log4JDailyRollingFileAppender.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/class-use/Log4JDailyRollingFileAppender.html
index 40a50f8..28d9c51 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/class-use/Log4JDailyRollingFileAppender.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/class-use/Log4JDailyRollingFileAppender.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/log4j/class-use/Log4JDailyRollingFileAppender.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.logger.log4j.Log4JDailyRollingFileAppender (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/class-use/Log4JExternallyRolledFileAppender.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/class-use/Log4JExternallyRolledFileAppender.html
index a6e1a52..4280b7d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/class-use/Log4JExternallyRolledFileAppender.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/class-use/Log4JExternallyRolledFileAppender.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/log4j/class-use/Log4JExternallyRolledFileAppender.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.logger.log4j.Log4JExternallyRolledFileAppender (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/class-use/Log4JFileAppender.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/class-use/Log4JFileAppender.html
index 6aa3fbe..360beb7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/class-use/Log4JFileAppender.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/class-use/Log4JFileAppender.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/log4j/class-use/Log4JFileAppender.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.logger.log4j.Log4JFileAppender (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/class-use/Log4JLogger.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/class-use/Log4JLogger.html
index 21c99f9..456b7f3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/class-use/Log4JLogger.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/class-use/Log4JLogger.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/log4j/class-use/Log4JLogger.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.logger.log4j.Log4JLogger (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/class-use/Log4jRollingFileAppender.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/class-use/Log4jRollingFileAppender.html
index 2c6fad5..6a6ce16 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/class-use/Log4jRollingFileAppender.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/class-use/Log4jRollingFileAppender.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/log4j/class-use/Log4jRollingFileAppender.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.logger.log4j.Log4jRollingFileAppender (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/package-frame.html
index a8ac4d9..26c5cfa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/log4j/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.logger.log4j (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/package-summary.html
index d88352b..f2d0a86 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/log4j/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.logger.log4j (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/package-tree.html
index 6bfebb4..1bb8b29 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/log4j/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.logger.log4j Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/package-use.html
index 5857d74..2017912 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/log4j/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.logger.log4j (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j2/Log4J2Logger.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j2/Log4J2Logger.html
index cab58d4..294160b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j2/Log4J2Logger.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j2/Log4J2Logger.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/log4j2/Log4J2Logger.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Log4J2Logger (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j2/class-use/Log4J2Logger.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j2/class-use/Log4J2Logger.html
index ecfa7ae..2854581 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j2/class-use/Log4J2Logger.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j2/class-use/Log4J2Logger.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/log4j2/class-use/Log4J2Logger.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.logger.log4j2.Log4J2Logger (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j2/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j2/package-frame.html
index 2af1033..2fce51d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j2/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j2/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/log4j2/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.logger.log4j2 (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j2/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j2/package-summary.html
index fab3102..3750394 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j2/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j2/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/log4j2/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.logger.log4j2 (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j2/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j2/package-tree.html
index 883361f..9746918 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j2/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j2/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/log4j2/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.logger.log4j2 Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j2/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j2/package-use.html
index a2cdcdf..1a98187 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j2/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/log4j2/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/log4j2/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.logger.log4j2 (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/package-frame.html
index 685bcf6..4598e98 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.logger (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/package-summary.html
index 37176a8..2f2a3e3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.logger (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/package-tree.html
index 068a0a5..da53c26 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.logger Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/package-use.html
index 3511740..5c7719a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.logger (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/slf4j/Slf4jLogger.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/slf4j/Slf4jLogger.html
index 7526a3a..b5d05d8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/slf4j/Slf4jLogger.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/slf4j/Slf4jLogger.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/slf4j/Slf4jLogger.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Slf4jLogger (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/slf4j/class-use/Slf4jLogger.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/slf4j/class-use/Slf4jLogger.html
index 921c876..6d5660d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/slf4j/class-use/Slf4jLogger.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/slf4j/class-use/Slf4jLogger.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/slf4j/class-use/Slf4jLogger.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.logger.slf4j.Slf4jLogger (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/slf4j/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/slf4j/package-frame.html
index 85f31dd..072a5dd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/slf4j/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/slf4j/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/slf4j/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.logger.slf4j (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/slf4j/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/slf4j/package-summary.html
index e60af24..c05a102 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/slf4j/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/slf4j/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/slf4j/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.logger.slf4j (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/slf4j/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/slf4j/package-tree.html
index a1046d7..b56d0ea 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/slf4j/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/slf4j/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/slf4j/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.logger.slf4j Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/logger/slf4j/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/logger/slf4j/package-use.html
index 3548281..c64a08e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/logger/slf4j/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/logger/slf4j/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/logger/slf4j/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.logger.slf4j (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/AbstractMarshaller.html b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/AbstractMarshaller.html
index bb8ddf3..c9c2041 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/AbstractMarshaller.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/AbstractMarshaller.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/marshaller/AbstractMarshaller.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>AbstractMarshaller (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/AbstractNodeNameAwareMarshaller.html b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/AbstractNodeNameAwareMarshaller.html
index 03af032..fd1dfcd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/AbstractNodeNameAwareMarshaller.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/AbstractNodeNameAwareMarshaller.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/marshaller/AbstractNodeNameAwareMarshaller.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>AbstractNodeNameAwareMarshaller (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/Marshaller.html b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/Marshaller.html
index b3da5b6..06f822a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/Marshaller.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/Marshaller.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/marshaller/Marshaller.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Marshaller (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/MarshallerContext.html b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/MarshallerContext.html
index 6306733..5be1d5a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/MarshallerContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/MarshallerContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/marshaller/MarshallerContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MarshallerContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/MarshallerExclusions.html b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/MarshallerExclusions.html
index a2deaf5..d79081c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/MarshallerExclusions.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/MarshallerExclusions.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/marshaller/MarshallerExclusions.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MarshallerExclusions (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/MarshallerUtils.html b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/MarshallerUtils.html
index 38c93da..91b7271 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/MarshallerUtils.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/MarshallerUtils.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/marshaller/MarshallerUtils.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MarshallerUtils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/class-use/AbstractMarshaller.html b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/class-use/AbstractMarshaller.html
index 5eb783a..148f387 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/class-use/AbstractMarshaller.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/class-use/AbstractMarshaller.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/marshaller/class-use/AbstractMarshaller.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.marshaller.AbstractMarshaller (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/class-use/AbstractNodeNameAwareMarshaller.html b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/class-use/AbstractNodeNameAwareMarshaller.html
index dfe9a6a..0ca2ead 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/class-use/AbstractNodeNameAwareMarshaller.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/class-use/AbstractNodeNameAwareMarshaller.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/marshaller/class-use/AbstractNodeNameAwareMarshaller.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.marshaller.AbstractNodeNameAwareMarshaller (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/class-use/Marshaller.html b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/class-use/Marshaller.html
index a4a1d35..aec39d9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/class-use/Marshaller.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/class-use/Marshaller.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/marshaller/class-use/Marshaller.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.marshaller.Marshaller (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/class-use/MarshallerContext.html b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/class-use/MarshallerContext.html
index 0910e1b..92af90e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/class-use/MarshallerContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/class-use/MarshallerContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/marshaller/class-use/MarshallerContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.marshaller.MarshallerContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/class-use/MarshallerExclusions.html b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/class-use/MarshallerExclusions.html
index e2fd6a5..e4f916d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/class-use/MarshallerExclusions.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/class-use/MarshallerExclusions.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/marshaller/class-use/MarshallerExclusions.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.marshaller.MarshallerExclusions (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/class-use/MarshallerUtils.html b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/class-use/MarshallerUtils.html
index 48e80a1..98bfd1a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/class-use/MarshallerUtils.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/class-use/MarshallerUtils.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/marshaller/class-use/MarshallerUtils.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.marshaller.MarshallerUtils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/jdk/JdkMarshaller.html b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/jdk/JdkMarshaller.html
index 612fd68..9743b94 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/jdk/JdkMarshaller.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/jdk/JdkMarshaller.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/marshaller/jdk/JdkMarshaller.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>JdkMarshaller (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/jdk/class-use/JdkMarshaller.html b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/jdk/class-use/JdkMarshaller.html
index 34f84ad..0616c56 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/jdk/class-use/JdkMarshaller.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/jdk/class-use/JdkMarshaller.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/marshaller/jdk/class-use/JdkMarshaller.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.marshaller.jdk.JdkMarshaller (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/jdk/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/jdk/package-frame.html
index f2acb24..b32315a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/jdk/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/jdk/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/marshaller/jdk/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.marshaller.jdk (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/jdk/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/jdk/package-summary.html
index 100bc46..8d78bd6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/jdk/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/jdk/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/marshaller/jdk/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.marshaller.jdk (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/jdk/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/jdk/package-tree.html
index 0dedfb5..b1a7e51 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/jdk/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/jdk/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/marshaller/jdk/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.marshaller.jdk Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/jdk/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/jdk/package-use.html
index abef5b0..6a3c0e5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/jdk/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/jdk/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/marshaller/jdk/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.marshaller.jdk (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/package-frame.html
index 81106e6..f19da8d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/marshaller/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.marshaller (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/package-summary.html
index 0b0d82e..b47ff1d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/marshaller/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.marshaller (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/package-tree.html
index de00087..19bb91e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/marshaller/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.marshaller Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/package-use.html
index d79d02b..b04bcfe 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/marshaller/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/marshaller/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/marshaller/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.marshaller (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mesos/ClusterProperties.html b/releases/2.9.1/javadoc/org/apache/ignite/mesos/ClusterProperties.html
index 5a4ff1d..d6c1250 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mesos/ClusterProperties.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mesos/ClusterProperties.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mesos/ClusterProperties.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClusterProperties (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mesos/IgniteFramework.html b/releases/2.9.1/javadoc/org/apache/ignite/mesos/IgniteFramework.html
index 67c3a57..f530a17 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mesos/IgniteFramework.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mesos/IgniteFramework.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mesos/IgniteFramework.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteFramework (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mesos/IgniteScheduler.html b/releases/2.9.1/javadoc/org/apache/ignite/mesos/IgniteScheduler.html
index 9d09db8..ddf1112 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mesos/IgniteScheduler.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mesos/IgniteScheduler.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mesos/IgniteScheduler.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteScheduler (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mesos/IgniteTask.html b/releases/2.9.1/javadoc/org/apache/ignite/mesos/IgniteTask.html
index a51446d..d5ee599 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mesos/IgniteTask.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mesos/IgniteTask.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mesos/IgniteTask.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteTask (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mesos/class-use/ClusterProperties.html b/releases/2.9.1/javadoc/org/apache/ignite/mesos/class-use/ClusterProperties.html
index 6736e80..c722877 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mesos/class-use/ClusterProperties.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mesos/class-use/ClusterProperties.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mesos/class-use/ClusterProperties.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.mesos.ClusterProperties (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mesos/class-use/IgniteFramework.html b/releases/2.9.1/javadoc/org/apache/ignite/mesos/class-use/IgniteFramework.html
index 1733649..63f0784 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mesos/class-use/IgniteFramework.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mesos/class-use/IgniteFramework.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mesos/class-use/IgniteFramework.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.mesos.IgniteFramework (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mesos/class-use/IgniteScheduler.html b/releases/2.9.1/javadoc/org/apache/ignite/mesos/class-use/IgniteScheduler.html
index 5a0d0ed..3a635c5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mesos/class-use/IgniteScheduler.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mesos/class-use/IgniteScheduler.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mesos/class-use/IgniteScheduler.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.mesos.IgniteScheduler (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mesos/class-use/IgniteTask.html b/releases/2.9.1/javadoc/org/apache/ignite/mesos/class-use/IgniteTask.html
index 812a651..1534df6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mesos/class-use/IgniteTask.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mesos/class-use/IgniteTask.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mesos/class-use/IgniteTask.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.mesos.IgniteTask (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mesos/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/mesos/package-frame.html
index 93e5e33..be263a2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mesos/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mesos/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mesos/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.mesos (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mesos/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/mesos/package-summary.html
index 707c51e..a216b55 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mesos/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mesos/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mesos/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.mesos (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mesos/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/mesos/package-tree.html
index 247a49e..2261beb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mesos/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mesos/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mesos/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.mesos Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mesos/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/mesos/package-use.html
index 58e0e7c..51be4a7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mesos/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mesos/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mesos/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.mesos (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/IgniteProvider.html b/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/IgniteProvider.html
index b49534b..fbe8143 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/IgniteProvider.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/IgniteProvider.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mesos/resource/IgniteProvider.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteProvider (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/JettyServer.html b/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/JettyServer.html
index eb936f6..7018822 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/JettyServer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/JettyServer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mesos/resource/JettyServer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>JettyServer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/ResourceHandler.html b/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/ResourceHandler.html
index be1cf74..5491030 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/ResourceHandler.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/ResourceHandler.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mesos/resource/ResourceHandler.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ResourceHandler (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/ResourceProvider.html b/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/ResourceProvider.html
index 8b8e1c2..1adf226 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/ResourceProvider.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/ResourceProvider.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mesos/resource/ResourceProvider.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ResourceProvider (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/class-use/IgniteProvider.html b/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/class-use/IgniteProvider.html
index 4616a01..3a81638 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/class-use/IgniteProvider.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/class-use/IgniteProvider.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mesos/resource/class-use/IgniteProvider.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.mesos.resource.IgniteProvider (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/class-use/JettyServer.html b/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/class-use/JettyServer.html
index 51a9644..6fd0a46 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/class-use/JettyServer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/class-use/JettyServer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mesos/resource/class-use/JettyServer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.mesos.resource.JettyServer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/class-use/ResourceHandler.html b/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/class-use/ResourceHandler.html
index 567cc2c..fe15b13 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/class-use/ResourceHandler.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/class-use/ResourceHandler.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mesos/resource/class-use/ResourceHandler.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.mesos.resource.ResourceHandler (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/class-use/ResourceProvider.html b/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/class-use/ResourceProvider.html
index b0cbd65..c7f347b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/class-use/ResourceProvider.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/class-use/ResourceProvider.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mesos/resource/class-use/ResourceProvider.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.mesos.resource.ResourceProvider (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/package-frame.html
index bea1e26..a8f96f5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mesos/resource/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.mesos.resource (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/package-summary.html
index cb4d62d..2c30469 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mesos/resource/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.mesos.resource (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/package-tree.html
index 6e451ba..8fcca5a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mesos/resource/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.mesos.resource Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/package-use.html
index e54fcbe..b621857 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mesos/resource/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mesos/resource/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.mesos.resource (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/messaging/MessagingListenActor.html b/releases/2.9.1/javadoc/org/apache/ignite/messaging/MessagingListenActor.html
index ab4f910..61111bc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/messaging/MessagingListenActor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/messaging/MessagingListenActor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/messaging/MessagingListenActor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MessagingListenActor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/messaging/class-use/MessagingListenActor.html b/releases/2.9.1/javadoc/org/apache/ignite/messaging/class-use/MessagingListenActor.html
index 76861e7..86dfcc7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/messaging/class-use/MessagingListenActor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/messaging/class-use/MessagingListenActor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/messaging/class-use/MessagingListenActor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.messaging.MessagingListenActor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/messaging/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/messaging/package-frame.html
index 4188b76..eacaf7e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/messaging/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/messaging/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/messaging/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.messaging (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/messaging/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/messaging/package-summary.html
index 4698b0d..ff76543 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/messaging/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/messaging/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/messaging/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.messaging (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/messaging/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/messaging/package-tree.html
index 36b7ce3..d3d0d4b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/messaging/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/messaging/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/messaging/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.messaging Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/messaging/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/messaging/package-use.html
index 8738aea..5f68c93 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/messaging/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/messaging/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/messaging/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.messaging (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/Exportable.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/Exportable.html
index 987eac5..b177ee3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/Exportable.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/Exportable.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/Exportable.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Exportable (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/Exporter.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/Exporter.html
index a5fa9fe..a08109c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/Exporter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/Exporter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/Exporter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Exporter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/FileExporter.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/FileExporter.html
index 171a5d8..855dd33 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/FileExporter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/FileExporter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/FileExporter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>FileExporter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/IgniteModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/IgniteModel.html
index 0c86af8..cb7fe7a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/IgniteModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/IgniteModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/IgniteModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/class-use/Exportable.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/class-use/Exportable.html
index 037ea48..58b2d10 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/class-use/Exportable.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/class-use/Exportable.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/class-use/Exportable.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.Exportable (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/class-use/Exporter.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/class-use/Exporter.html
index f0342e5..0c0bb1e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/class-use/Exporter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/class-use/Exporter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/class-use/Exporter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.Exporter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/class-use/FileExporter.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/class-use/FileExporter.html
index 0650298..a7a25a1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/class-use/FileExporter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/class-use/FileExporter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/class-use/FileExporter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.FileExporter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/class-use/IgniteModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/class-use/IgniteModel.html
index 3584058..dd3c70e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/class-use/IgniteModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/class-use/IgniteModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/class-use/IgniteModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.IgniteModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/CovarianceMatricesAggregator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/CovarianceMatricesAggregator.html
index 3f12c5e..746f9fe 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/CovarianceMatricesAggregator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/CovarianceMatricesAggregator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/clustering/gmm/CovarianceMatricesAggregator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CovarianceMatricesAggregator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/GmmModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/GmmModel.html
index ff9f8db..86b6f33 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/GmmModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/GmmModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/clustering/gmm/GmmModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GmmModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/GmmTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/GmmTrainer.html
index 0f93094..bc6a9d3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/GmmTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/GmmTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/clustering/gmm/GmmTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GmmTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/NewComponentStatisticsAggregator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/NewComponentStatisticsAggregator.html
index 2882b35..3edd4eb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/NewComponentStatisticsAggregator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/NewComponentStatisticsAggregator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/clustering/gmm/NewComponentStatisticsAggregator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NewComponentStatisticsAggregator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/class-use/CovarianceMatricesAggregator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/class-use/CovarianceMatricesAggregator.html
index 3e78bec..eb244b0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/class-use/CovarianceMatricesAggregator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/class-use/CovarianceMatricesAggregator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/clustering/gmm/class-use/CovarianceMatricesAggregator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.clustering.gmm.CovarianceMatricesAggregator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/class-use/GmmModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/class-use/GmmModel.html
index d08632d..1cf0627 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/class-use/GmmModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/class-use/GmmModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/clustering/gmm/class-use/GmmModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.clustering.gmm.GmmModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/class-use/GmmTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/class-use/GmmTrainer.html
index 590e4a3..5bfdcdc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/class-use/GmmTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/class-use/GmmTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/clustering/gmm/class-use/GmmTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.clustering.gmm.GmmTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/class-use/NewComponentStatisticsAggregator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/class-use/NewComponentStatisticsAggregator.html
index f5be5c9..091c296 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/class-use/NewComponentStatisticsAggregator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/class-use/NewComponentStatisticsAggregator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/clustering/gmm/class-use/NewComponentStatisticsAggregator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.clustering.gmm.NewComponentStatisticsAggregator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/package-frame.html
index aa83c46..d5a8124 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/clustering/gmm/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.clustering.gmm (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/package-summary.html
index 2682cef..448a595 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/clustering/gmm/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.clustering.gmm (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/package-tree.html
index c8036af..83ec889 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/clustering/gmm/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.clustering.gmm Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/package-use.html
index b76a112..7bf9519 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/gmm/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/clustering/gmm/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.clustering.gmm (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/Clusterer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/Clusterer.html
index 2672ad1..2a5f856 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/Clusterer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/Clusterer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/clustering/kmeans/Clusterer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Clusterer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/ClusterizationModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/ClusterizationModel.html
index 37440d6..b3c5493 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/ClusterizationModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/ClusterizationModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/clustering/kmeans/ClusterizationModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClusterizationModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/KMeansModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/KMeansModel.html
index 538c456..5c6b0d6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/KMeansModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/KMeansModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/clustering/kmeans/KMeansModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>KMeansModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/KMeansModelFormat.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/KMeansModelFormat.html
index 9446bc7..2f07175 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/KMeansModelFormat.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/KMeansModelFormat.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/clustering/kmeans/KMeansModelFormat.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>KMeansModelFormat (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/KMeansTrainer.TotalCostAndCounts.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/KMeansTrainer.TotalCostAndCounts.html
index 9c99b65..6ff29f7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/KMeansTrainer.TotalCostAndCounts.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/KMeansTrainer.TotalCostAndCounts.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/clustering/kmeans/KMeansTrainer.TotalCostAndCounts.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>KMeansTrainer.TotalCostAndCounts (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/KMeansTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/KMeansTrainer.html
index e011126..6df261a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/KMeansTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/KMeansTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/clustering/kmeans/KMeansTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>KMeansTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/class-use/Clusterer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/class-use/Clusterer.html
index 320ddb5..fb0bb32 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/class-use/Clusterer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/class-use/Clusterer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/clustering/kmeans/class-use/Clusterer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.clustering.kmeans.Clusterer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/class-use/ClusterizationModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/class-use/ClusterizationModel.html
index 6cd4461..27111c1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/class-use/ClusterizationModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/class-use/ClusterizationModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/clustering/kmeans/class-use/ClusterizationModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.clustering.kmeans.ClusterizationModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/class-use/KMeansModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/class-use/KMeansModel.html
index 33a0a84..e0b3d20 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/class-use/KMeansModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/class-use/KMeansModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/clustering/kmeans/class-use/KMeansModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.clustering.kmeans.KMeansModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/class-use/KMeansModelFormat.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/class-use/KMeansModelFormat.html
index ba6e1e7..09b99f2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/class-use/KMeansModelFormat.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/class-use/KMeansModelFormat.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/clustering/kmeans/class-use/KMeansModelFormat.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.clustering.kmeans.KMeansModelFormat (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/class-use/KMeansTrainer.TotalCostAndCounts.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/class-use/KMeansTrainer.TotalCostAndCounts.html
index 0590a9a..951379d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/class-use/KMeansTrainer.TotalCostAndCounts.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/class-use/KMeansTrainer.TotalCostAndCounts.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/clustering/kmeans/class-use/KMeansTrainer.TotalCostAndCounts.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.clustering.kmeans.KMeansTrainer.TotalCostAndCounts (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/class-use/KMeansTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/class-use/KMeansTrainer.html
index 4ea6a2c..e66bb44 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/class-use/KMeansTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/class-use/KMeansTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/clustering/kmeans/class-use/KMeansTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.clustering.kmeans.KMeansTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/package-frame.html
index 732c134..db43206 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/clustering/kmeans/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.clustering.kmeans (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/package-summary.html
index 7e35491..15ec2f2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/clustering/kmeans/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.clustering.kmeans (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/package-tree.html
index 77bcf7d..9f1bd7a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/clustering/kmeans/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.clustering.kmeans Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/package-use.html
index 882222f..15507e5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/kmeans/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/clustering/kmeans/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.clustering.kmeans (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/package-frame.html
index 9b901af..62eeb9b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/clustering/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.clustering (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/package-summary.html
index 3a31bd8..b437c86 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/clustering/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.clustering (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/package-tree.html
index 43f4c94..ac359fd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/clustering/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.clustering Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/package-use.html
index 64f3d7b..0896094 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/clustering/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/clustering/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.clustering (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/CompositionUtils.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/CompositionUtils.html
index fb76f08..cea6d50 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/CompositionUtils.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/CompositionUtils.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/CompositionUtils.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CompositionUtils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/DatasetMapping.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/DatasetMapping.html
index 5483fa8..3300c32 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/DatasetMapping.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/DatasetMapping.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/DatasetMapping.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DatasetMapping (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/ModelOnFeaturesSubspace.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/ModelOnFeaturesSubspace.html
index 59af4e6..5bf9849 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/ModelOnFeaturesSubspace.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/ModelOnFeaturesSubspace.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/ModelOnFeaturesSubspace.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ModelOnFeaturesSubspace (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/ModelsComposition.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/ModelsComposition.html
index 7b54e37..bcee3d9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/ModelsComposition.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/ModelsComposition.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/ModelsComposition.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ModelsComposition (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/ModelsCompositionFormat.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/ModelsCompositionFormat.html
index 9fee00f..76724a2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/ModelsCompositionFormat.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/ModelsCompositionFormat.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/ModelsCompositionFormat.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ModelsCompositionFormat (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/bagging/BaggedModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/bagging/BaggedModel.html
index 68c853e..e8f73a3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/bagging/BaggedModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/bagging/BaggedModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/bagging/BaggedModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BaggedModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/bagging/BaggedTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/bagging/BaggedTrainer.html
index bf2924b..4d783ce 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/bagging/BaggedTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/bagging/BaggedTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/bagging/BaggedTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BaggedTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/bagging/class-use/BaggedModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/bagging/class-use/BaggedModel.html
index d8a7ff0..4cdbb85 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/bagging/class-use/BaggedModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/bagging/class-use/BaggedModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/bagging/class-use/BaggedModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.composition.bagging.BaggedModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/bagging/class-use/BaggedTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/bagging/class-use/BaggedTrainer.html
index 5fcffca..fb42f1c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/bagging/class-use/BaggedTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/bagging/class-use/BaggedTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/bagging/class-use/BaggedTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.composition.bagging.BaggedTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/bagging/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/bagging/package-frame.html
index c82f502..458c563 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/bagging/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/bagging/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/bagging/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.bagging (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/bagging/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/bagging/package-summary.html
index 9b1a746..55d937d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/bagging/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/bagging/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/bagging/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.bagging (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/bagging/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/bagging/package-tree.html
index d95adfc..cc384bc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/bagging/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/bagging/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/bagging/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.bagging Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/bagging/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/bagging/package-use.html
index c90394b..5440695 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/bagging/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/bagging/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/bagging/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.composition.bagging (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/GDBBinaryClassifierTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/GDBBinaryClassifierTrainer.html
index 267b9ba..08c0989 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/GDBBinaryClassifierTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/GDBBinaryClassifierTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/GDBBinaryClassifierTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GDBBinaryClassifierTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/GDBLearningStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/GDBLearningStrategy.html
index c8d6821..e62ceb5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/GDBLearningStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/GDBLearningStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/GDBLearningStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GDBLearningStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/GDBRegressionTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/GDBRegressionTrainer.html
index b585076..446c702 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/GDBRegressionTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/GDBRegressionTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/GDBRegressionTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GDBRegressionTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/GDBTrainer.GDBModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/GDBTrainer.GDBModel.html
index a3398a2..2f4a98c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/GDBTrainer.GDBModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/GDBTrainer.GDBModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/GDBTrainer.GDBModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GDBTrainer.GDBModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/GDBTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/GDBTrainer.html
index 6abed14..85b3a4d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/GDBTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/GDBTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/GDBTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GDBTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/class-use/GDBBinaryClassifierTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/class-use/GDBBinaryClassifierTrainer.html
index 9a4ad1a..d63ada6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/class-use/GDBBinaryClassifierTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/class-use/GDBBinaryClassifierTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/class-use/GDBBinaryClassifierTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.composition.boosting.GDBBinaryClassifierTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/class-use/GDBLearningStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/class-use/GDBLearningStrategy.html
index 56c0493..1602cf2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/class-use/GDBLearningStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/class-use/GDBLearningStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/class-use/GDBLearningStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.composition.boosting.GDBLearningStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/class-use/GDBRegressionTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/class-use/GDBRegressionTrainer.html
index 0d8c7f2..55843cf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/class-use/GDBRegressionTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/class-use/GDBRegressionTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/class-use/GDBRegressionTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.composition.boosting.GDBRegressionTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/class-use/GDBTrainer.GDBModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/class-use/GDBTrainer.GDBModel.html
index 0e55033..56a5043 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/class-use/GDBTrainer.GDBModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/class-use/GDBTrainer.GDBModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/class-use/GDBTrainer.GDBModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.composition.boosting.GDBTrainer.GDBModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/class-use/GDBTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/class-use/GDBTrainer.html
index 65f1113..da40980 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/class-use/GDBTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/class-use/GDBTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/class-use/GDBTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.composition.boosting.GDBTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/ConvergenceChecker.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/ConvergenceChecker.html
index 5ee82f1..2ea4464 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/ConvergenceChecker.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/ConvergenceChecker.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/convergence/ConvergenceChecker.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ConvergenceChecker (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/ConvergenceCheckerFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/ConvergenceCheckerFactory.html
index 4d19783..59b2120 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/ConvergenceCheckerFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/ConvergenceCheckerFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/convergence/ConvergenceCheckerFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ConvergenceCheckerFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/class-use/ConvergenceChecker.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/class-use/ConvergenceChecker.html
index 78be78f..a8943ff 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/class-use/ConvergenceChecker.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/class-use/ConvergenceChecker.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/convergence/class-use/ConvergenceChecker.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.composition.boosting.convergence.ConvergenceChecker (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/class-use/ConvergenceCheckerFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/class-use/ConvergenceCheckerFactory.html
index a03967b..c01f5fb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/class-use/ConvergenceCheckerFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/class-use/ConvergenceCheckerFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/convergence/class-use/ConvergenceCheckerFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.composition.boosting.convergence.ConvergenceCheckerFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/MeanAbsValueConvergenceChecker.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/MeanAbsValueConvergenceChecker.html
index 858a99a..0d0ae0f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/MeanAbsValueConvergenceChecker.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/MeanAbsValueConvergenceChecker.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/MeanAbsValueConvergenceChecker.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MeanAbsValueConvergenceChecker (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/MeanAbsValueConvergenceCheckerFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/MeanAbsValueConvergenceCheckerFactory.html
index e0c19b7..a28f777 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/MeanAbsValueConvergenceCheckerFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/MeanAbsValueConvergenceCheckerFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/MeanAbsValueConvergenceCheckerFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MeanAbsValueConvergenceCheckerFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/class-use/MeanAbsValueConvergenceChecker.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/class-use/MeanAbsValueConvergenceChecker.html
index f77a7a4..68042d2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/class-use/MeanAbsValueConvergenceChecker.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/class-use/MeanAbsValueConvergenceChecker.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/class-use/MeanAbsValueConvergenceChecker.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.composition.boosting.convergence.mean.MeanAbsValueConvergenceChecker (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/class-use/MeanAbsValueConvergenceCheckerFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/class-use/MeanAbsValueConvergenceCheckerFactory.html
index 78e4bd3..12a8b0d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/class-use/MeanAbsValueConvergenceCheckerFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/class-use/MeanAbsValueConvergenceCheckerFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/class-use/MeanAbsValueConvergenceCheckerFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.composition.boosting.convergence.mean.MeanAbsValueConvergenceCheckerFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/package-frame.html
index 513d279..954c979 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.boosting.convergence.mean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/package-summary.html
index b97a424..2016aab 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.boosting.convergence.mean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/package-tree.html
index 8503b97..cd10914 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.boosting.convergence.mean Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/package-use.html
index 0b9c3af..16061c1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/convergence/mean/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.composition.boosting.convergence.mean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/MedianOfMedianConvergenceChecker.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/MedianOfMedianConvergenceChecker.html
index 9e1b16e..e0133c7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/MedianOfMedianConvergenceChecker.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/MedianOfMedianConvergenceChecker.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/MedianOfMedianConvergenceChecker.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MedianOfMedianConvergenceChecker (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/MedianOfMedianConvergenceCheckerFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/MedianOfMedianConvergenceCheckerFactory.html
index cb9b1ff..a30a3e5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/MedianOfMedianConvergenceCheckerFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/MedianOfMedianConvergenceCheckerFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/MedianOfMedianConvergenceCheckerFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MedianOfMedianConvergenceCheckerFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/class-use/MedianOfMedianConvergenceChecker.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/class-use/MedianOfMedianConvergenceChecker.html
index 034bfbb..5841db6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/class-use/MedianOfMedianConvergenceChecker.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/class-use/MedianOfMedianConvergenceChecker.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/class-use/MedianOfMedianConvergenceChecker.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.composition.boosting.convergence.median.MedianOfMedianConvergenceChecker (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/class-use/MedianOfMedianConvergenceCheckerFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/class-use/MedianOfMedianConvergenceCheckerFactory.html
index 273d4c0..b1f2fee 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/class-use/MedianOfMedianConvergenceCheckerFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/class-use/MedianOfMedianConvergenceCheckerFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/class-use/MedianOfMedianConvergenceCheckerFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.composition.boosting.convergence.median.MedianOfMedianConvergenceCheckerFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/package-frame.html
index b32e379..a0dae5e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.boosting.convergence.median (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/package-summary.html
index 869f569..0d44f07 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.boosting.convergence.median (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/package-tree.html
index c1ad97b..4563515 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.boosting.convergence.median Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/package-use.html
index 7197de4..472186f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/convergence/median/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.composition.boosting.convergence.median (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/package-frame.html
index d5569cb..8fbd6ff 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/convergence/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.boosting.convergence (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/package-summary.html
index 9047506..37949b3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/convergence/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.boosting.convergence (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/package-tree.html
index 1b2a928..ec78a99 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/convergence/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.boosting.convergence Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/package-use.html
index 3c5335a..7746e85 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/convergence/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.composition.boosting.convergence (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/ConvergenceCheckerStub.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/ConvergenceCheckerStub.html
index 443cb94..4034005 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/ConvergenceCheckerStub.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/ConvergenceCheckerStub.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/ConvergenceCheckerStub.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ConvergenceCheckerStub (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/ConvergenceCheckerStubFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/ConvergenceCheckerStubFactory.html
index 80bde26..428ea57 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/ConvergenceCheckerStubFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/ConvergenceCheckerStubFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/ConvergenceCheckerStubFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ConvergenceCheckerStubFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/class-use/ConvergenceCheckerStub.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/class-use/ConvergenceCheckerStub.html
index da62b3e..b56043f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/class-use/ConvergenceCheckerStub.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/class-use/ConvergenceCheckerStub.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/class-use/ConvergenceCheckerStub.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.composition.boosting.convergence.simple.ConvergenceCheckerStub (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/class-use/ConvergenceCheckerStubFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/class-use/ConvergenceCheckerStubFactory.html
index 56c4125..b4164bf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/class-use/ConvergenceCheckerStubFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/class-use/ConvergenceCheckerStubFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/class-use/ConvergenceCheckerStubFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.composition.boosting.convergence.simple.ConvergenceCheckerStubFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/package-frame.html
index 301942a..38122fa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.boosting.convergence.simple (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/package-summary.html
index 212cb4d..8a6e669 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.boosting.convergence.simple (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/package-tree.html
index c232400..2cecf87 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.boosting.convergence.simple Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/package-use.html
index 40c1410..62fe79f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/convergence/simple/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.composition.boosting.convergence.simple (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/LogLoss.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/LogLoss.html
index 77a6baa..7b29bed 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/LogLoss.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/LogLoss.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/loss/LogLoss.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LogLoss (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/Loss.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/Loss.html
index 37ae72d..811cb1c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/Loss.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/Loss.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/loss/Loss.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Loss (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/SquaredError.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/SquaredError.html
index e2f6d4f..2360170 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/SquaredError.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/SquaredError.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/loss/SquaredError.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SquaredError (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/class-use/LogLoss.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/class-use/LogLoss.html
index f0621f4..6b8c4a2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/class-use/LogLoss.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/class-use/LogLoss.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/loss/class-use/LogLoss.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.composition.boosting.loss.LogLoss (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/class-use/Loss.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/class-use/Loss.html
index b7457eb..45838b1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/class-use/Loss.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/class-use/Loss.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/loss/class-use/Loss.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.composition.boosting.loss.Loss (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/class-use/SquaredError.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/class-use/SquaredError.html
index 69a7458..cfacdf8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/class-use/SquaredError.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/class-use/SquaredError.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/loss/class-use/SquaredError.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.composition.boosting.loss.SquaredError (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/package-frame.html
index 3d65f04..2b35b38 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/loss/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.boosting.loss (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/package-summary.html
index 64a4062..9716f81 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/loss/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.boosting.loss (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/package-tree.html
index 04530ba..4d1bad2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/loss/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.boosting.loss Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/package-use.html
index 54b1fe0..ee7ecf7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/loss/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/loss/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.composition.boosting.loss (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/package-frame.html
index 9a37b16..909e3e1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.boosting (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/package-summary.html
index 3bc494a..71a4c99 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.boosting (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/package-tree.html
index dbf16ae..3ac25fd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.boosting Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/package-use.html
index 56fc9ce..2bbcc88 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/boosting/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/boosting/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.composition.boosting (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/class-use/CompositionUtils.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/class-use/CompositionUtils.html
index bc19a7f..6c73876 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/class-use/CompositionUtils.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/class-use/CompositionUtils.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/class-use/CompositionUtils.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.composition.CompositionUtils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/class-use/DatasetMapping.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/class-use/DatasetMapping.html
index a7d3fd8..af0fc31 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/class-use/DatasetMapping.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/class-use/DatasetMapping.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/class-use/DatasetMapping.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.composition.DatasetMapping (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/class-use/ModelOnFeaturesSubspace.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/class-use/ModelOnFeaturesSubspace.html
index 718a1a7..f7561ea 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/class-use/ModelOnFeaturesSubspace.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/class-use/ModelOnFeaturesSubspace.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/class-use/ModelOnFeaturesSubspace.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.composition.ModelOnFeaturesSubspace (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/class-use/ModelsComposition.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/class-use/ModelsComposition.html
index 922e29d..4c0203b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/class-use/ModelsComposition.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/class-use/ModelsComposition.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/class-use/ModelsComposition.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.composition.ModelsComposition (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/class-use/ModelsCompositionFormat.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/class-use/ModelsCompositionFormat.html
index 4c9b5c5..96104a7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/class-use/ModelsCompositionFormat.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/class-use/ModelsCompositionFormat.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/class-use/ModelsCompositionFormat.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.composition.ModelsCompositionFormat (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/package-frame.html
index 8da21cf..10c03f9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/combinators/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.combinators (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/package-summary.html
index 1414cfd..fae05ae 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/combinators/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.combinators (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/package-tree.html
index 6e9a2fd..f6ef9be 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/combinators/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.combinators Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/package-use.html
index a78c7ee..0ff74b1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/combinators/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.composition.combinators (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/parallel/ModelsParallelComposition.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/parallel/ModelsParallelComposition.html
index f05998b..6a3bc87 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/parallel/ModelsParallelComposition.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/parallel/ModelsParallelComposition.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/combinators/parallel/ModelsParallelComposition.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ModelsParallelComposition (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/parallel/TrainersParallelComposition.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/parallel/TrainersParallelComposition.html
index 996e8cf..2797e93 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/parallel/TrainersParallelComposition.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/parallel/TrainersParallelComposition.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/combinators/parallel/TrainersParallelComposition.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TrainersParallelComposition (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/parallel/class-use/ModelsParallelComposition.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/parallel/class-use/ModelsParallelComposition.html
index 371de58..b543659 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/parallel/class-use/ModelsParallelComposition.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/parallel/class-use/ModelsParallelComposition.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/combinators/parallel/class-use/ModelsParallelComposition.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.composition.combinators.parallel.ModelsParallelComposition (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/parallel/class-use/TrainersParallelComposition.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/parallel/class-use/TrainersParallelComposition.html
index 5e86f31..02a0bf1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/parallel/class-use/TrainersParallelComposition.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/parallel/class-use/TrainersParallelComposition.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/combinators/parallel/class-use/TrainersParallelComposition.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.composition.combinators.parallel.TrainersParallelComposition (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/parallel/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/parallel/package-frame.html
index 90713c8..4ccaeec 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/parallel/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/parallel/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/combinators/parallel/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.combinators.parallel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/parallel/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/parallel/package-summary.html
index 0cfbd97..ff6423a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/parallel/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/parallel/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/combinators/parallel/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.combinators.parallel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/parallel/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/parallel/package-tree.html
index b345dc7..4ebf167 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/parallel/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/parallel/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/combinators/parallel/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.combinators.parallel Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/parallel/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/parallel/package-use.html
index fd3492e..e1d9eae 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/parallel/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/parallel/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/combinators/parallel/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.composition.combinators.parallel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/sequential/ModelsSequentialComposition.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/sequential/ModelsSequentialComposition.html
index b0bc748..43818f2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/sequential/ModelsSequentialComposition.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/sequential/ModelsSequentialComposition.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/combinators/sequential/ModelsSequentialComposition.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ModelsSequentialComposition (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/sequential/TrainersSequentialComposition.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/sequential/TrainersSequentialComposition.html
index d0214b9..0491218 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/sequential/TrainersSequentialComposition.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/sequential/TrainersSequentialComposition.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/combinators/sequential/TrainersSequentialComposition.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TrainersSequentialComposition (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/sequential/class-use/ModelsSequentialComposition.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/sequential/class-use/ModelsSequentialComposition.html
index 3b38879..f43da73 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/sequential/class-use/ModelsSequentialComposition.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/sequential/class-use/ModelsSequentialComposition.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/combinators/sequential/class-use/ModelsSequentialComposition.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.composition.combinators.sequential.ModelsSequentialComposition (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/sequential/class-use/TrainersSequentialComposition.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/sequential/class-use/TrainersSequentialComposition.html
index 2eaaa85..d16a83e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/sequential/class-use/TrainersSequentialComposition.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/sequential/class-use/TrainersSequentialComposition.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/combinators/sequential/class-use/TrainersSequentialComposition.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.composition.combinators.sequential.TrainersSequentialComposition (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/sequential/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/sequential/package-frame.html
index c15ccdb..2b6498c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/sequential/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/sequential/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/combinators/sequential/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.combinators.sequential (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/sequential/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/sequential/package-summary.html
index 213a73d..5b53c1d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/sequential/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/sequential/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/combinators/sequential/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.combinators.sequential (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/sequential/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/sequential/package-tree.html
index dc43d1e..9405309 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/sequential/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/sequential/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/combinators/sequential/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.combinators.sequential Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/sequential/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/sequential/package-use.html
index 06f873e..78dee6a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/sequential/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/combinators/sequential/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/combinators/sequential/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.composition.combinators.sequential (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/package-frame.html
index 0e926f8..3c1a272 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/package-summary.html
index ba75ffd..b07addc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/package-tree.html
index c1acff8..3938581 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/package-use.html
index 78c76ca..241ddca 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.composition (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/MeanValuePredictionsAggregator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/MeanValuePredictionsAggregator.html
index 2e55698..7b41bc7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/MeanValuePredictionsAggregator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/MeanValuePredictionsAggregator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/MeanValuePredictionsAggregator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MeanValuePredictionsAggregator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/OnMajorityPredictionsAggregator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/OnMajorityPredictionsAggregator.html
index 8c7d99a..3d7bcba 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/OnMajorityPredictionsAggregator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/OnMajorityPredictionsAggregator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/OnMajorityPredictionsAggregator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>OnMajorityPredictionsAggregator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/PredictionsAggregator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/PredictionsAggregator.html
index 1e050dc..b16e276 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/PredictionsAggregator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/PredictionsAggregator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/PredictionsAggregator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PredictionsAggregator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/WeightedPredictionsAggregator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/WeightedPredictionsAggregator.html
index 5a70379..c56794c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/WeightedPredictionsAggregator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/WeightedPredictionsAggregator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/WeightedPredictionsAggregator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>WeightedPredictionsAggregator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/class-use/MeanValuePredictionsAggregator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/class-use/MeanValuePredictionsAggregator.html
index 3716f3b..f14d41c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/class-use/MeanValuePredictionsAggregator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/class-use/MeanValuePredictionsAggregator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/class-use/MeanValuePredictionsAggregator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.composition.predictionsaggregator.MeanValuePredictionsAggregator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/class-use/OnMajorityPredictionsAggregator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/class-use/OnMajorityPredictionsAggregator.html
index 81e01b9..2e8efb0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/class-use/OnMajorityPredictionsAggregator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/class-use/OnMajorityPredictionsAggregator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/class-use/OnMajorityPredictionsAggregator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.composition.predictionsaggregator.OnMajorityPredictionsAggregator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/class-use/PredictionsAggregator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/class-use/PredictionsAggregator.html
index 0d935be..ace43dc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/class-use/PredictionsAggregator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/class-use/PredictionsAggregator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/class-use/PredictionsAggregator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.composition.predictionsaggregator.PredictionsAggregator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/class-use/WeightedPredictionsAggregator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/class-use/WeightedPredictionsAggregator.html
index d7f0772..9e5c421 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/class-use/WeightedPredictionsAggregator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/class-use/WeightedPredictionsAggregator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/class-use/WeightedPredictionsAggregator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.composition.predictionsaggregator.WeightedPredictionsAggregator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/package-frame.html
index a6c35cb..f69801f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.predictionsaggregator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/package-summary.html
index 6d19de8..0bf5b94 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.predictionsaggregator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/package-tree.html
index 685a4fa..0e5ef66 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.predictionsaggregator Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/package-use.html
index 57781f9..a06d5ba 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/predictionsaggregator/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.composition.predictionsaggregator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/SimpleStackedDatasetTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/SimpleStackedDatasetTrainer.html
index b8fc082..917d654 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/SimpleStackedDatasetTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/SimpleStackedDatasetTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/stacking/SimpleStackedDatasetTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SimpleStackedDatasetTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/StackedDatasetTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/StackedDatasetTrainer.html
index e8e2ebb..b25f56e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/StackedDatasetTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/StackedDatasetTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/stacking/StackedDatasetTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>StackedDatasetTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/StackedModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/StackedModel.html
index 9743204..3aa2fcc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/StackedModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/StackedModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/stacking/StackedModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>StackedModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/StackedVectorDatasetTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/StackedVectorDatasetTrainer.html
index ef34805..76f8eca 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/StackedVectorDatasetTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/StackedVectorDatasetTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/stacking/StackedVectorDatasetTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>StackedVectorDatasetTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/class-use/SimpleStackedDatasetTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/class-use/SimpleStackedDatasetTrainer.html
index 9cdbc36..1cc6205 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/class-use/SimpleStackedDatasetTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/class-use/SimpleStackedDatasetTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/stacking/class-use/SimpleStackedDatasetTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.composition.stacking.SimpleStackedDatasetTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/class-use/StackedDatasetTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/class-use/StackedDatasetTrainer.html
index adc1312..d961973 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/class-use/StackedDatasetTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/class-use/StackedDatasetTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/stacking/class-use/StackedDatasetTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.composition.stacking.StackedDatasetTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/class-use/StackedModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/class-use/StackedModel.html
index 063517d..f143000 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/class-use/StackedModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/class-use/StackedModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/stacking/class-use/StackedModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.composition.stacking.StackedModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/class-use/StackedVectorDatasetTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/class-use/StackedVectorDatasetTrainer.html
index 2bf5008..b1795b7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/class-use/StackedVectorDatasetTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/class-use/StackedVectorDatasetTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/stacking/class-use/StackedVectorDatasetTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.composition.stacking.StackedVectorDatasetTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/package-frame.html
index cf778c3..7b7c875 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/stacking/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.stacking (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/package-summary.html
index 13d2394..1a4ff21 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/stacking/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.stacking (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/package-tree.html
index e699f1e..94443da 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/stacking/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.composition.stacking Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/package-use.html
index 9e51e88..11d36cc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/composition/stacking/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/composition/stacking/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.composition.stacking (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/Dataset.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/Dataset.html
index 62420ec..d2564b6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/Dataset.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/Dataset.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/Dataset.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Dataset (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/DatasetBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/DatasetBuilder.html
index a59ee92..2b0f9e7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/DatasetBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/DatasetBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/DatasetBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DatasetBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/DatasetFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/DatasetFactory.html
index 18dc131..b5447d0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/DatasetFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/DatasetFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/DatasetFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DatasetFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/PartitionContextBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/PartitionContextBuilder.html
index da9aff8..d25cbc1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/PartitionContextBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/PartitionContextBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/PartitionContextBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PartitionContextBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/PartitionDataBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/PartitionDataBuilder.html
index eb285c8..d6da56b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/PartitionDataBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/PartitionDataBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/PartitionDataBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PartitionDataBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/UpstreamEntry.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/UpstreamEntry.html
index 1e65ef5..9e66ccf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/UpstreamEntry.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/UpstreamEntry.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/UpstreamEntry.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>UpstreamEntry (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/UpstreamTransformer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/UpstreamTransformer.html
index 933a986..1de5c60 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/UpstreamTransformer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/UpstreamTransformer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/UpstreamTransformer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>UpstreamTransformer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/UpstreamTransformerBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/UpstreamTransformerBuilder.html
index 7fc1cab..cd0a0aa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/UpstreamTransformerBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/UpstreamTransformerBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/UpstreamTransformerBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>UpstreamTransformerBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/class-use/Dataset.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/class-use/Dataset.html
index 57e5355..a235702 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/class-use/Dataset.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/class-use/Dataset.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/class-use/Dataset.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.dataset.Dataset (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/class-use/DatasetBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/class-use/DatasetBuilder.html
index cc67559..ee05bc0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/class-use/DatasetBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/class-use/DatasetBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/class-use/DatasetBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.dataset.DatasetBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/class-use/DatasetFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/class-use/DatasetFactory.html
index 7a1acaa..5c293e1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/class-use/DatasetFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/class-use/DatasetFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/class-use/DatasetFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.DatasetFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/class-use/PartitionContextBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/class-use/PartitionContextBuilder.html
index b4a80be..187d58d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/class-use/PartitionContextBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/class-use/PartitionContextBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/class-use/PartitionContextBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.dataset.PartitionContextBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/class-use/PartitionDataBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/class-use/PartitionDataBuilder.html
index e53fd78..02cb2ea 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/class-use/PartitionDataBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/class-use/PartitionDataBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/class-use/PartitionDataBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.dataset.PartitionDataBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/class-use/UpstreamEntry.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/class-use/UpstreamEntry.html
index 3e78a9c..d76678b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/class-use/UpstreamEntry.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/class-use/UpstreamEntry.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/class-use/UpstreamEntry.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.UpstreamEntry (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/class-use/UpstreamTransformer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/class-use/UpstreamTransformer.html
index f9130f3..4c87054 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/class-use/UpstreamTransformer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/class-use/UpstreamTransformer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/class-use/UpstreamTransformer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.dataset.UpstreamTransformer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/class-use/UpstreamTransformerBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/class-use/UpstreamTransformerBuilder.html
index e3c9611..8f4ab87 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/class-use/UpstreamTransformerBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/class-use/UpstreamTransformerBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/class-use/UpstreamTransformerBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.dataset.UpstreamTransformerBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/BucketMeta.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/BucketMeta.html
index d7b0d9e..86ff1a4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/BucketMeta.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/BucketMeta.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/BucketMeta.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BucketMeta (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/DistributionComputer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/DistributionComputer.html
index f05b2c0..138748d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/DistributionComputer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/DistributionComputer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/DistributionComputer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DistributionComputer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/FeatureMeta.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/FeatureMeta.html
index 7f909ab..e01c045 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/FeatureMeta.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/FeatureMeta.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/FeatureMeta.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>FeatureMeta (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/Histogram.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/Histogram.html
index a37d83c..7421ad5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/Histogram.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/Histogram.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/Histogram.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Histogram (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/ObjectHistogram.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/ObjectHistogram.html
index 8d80390..83f20d6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/ObjectHistogram.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/ObjectHistogram.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/ObjectHistogram.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ObjectHistogram (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/class-use/BucketMeta.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/class-use/BucketMeta.html
index a4ce674..2a5131c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/class-use/BucketMeta.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/class-use/BucketMeta.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/class-use/BucketMeta.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.feature.BucketMeta (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/class-use/DistributionComputer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/class-use/DistributionComputer.html
index 4462a1a..2a786f5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/class-use/DistributionComputer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/class-use/DistributionComputer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/class-use/DistributionComputer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.dataset.feature.DistributionComputer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/class-use/FeatureMeta.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/class-use/FeatureMeta.html
index 5a6e6ca..ab5d5e3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/class-use/FeatureMeta.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/class-use/FeatureMeta.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/class-use/FeatureMeta.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.feature.FeatureMeta (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/class-use/Histogram.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/class-use/Histogram.html
index 85bd916..eafe789 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/class-use/Histogram.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/class-use/Histogram.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/class-use/Histogram.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.dataset.feature.Histogram (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/class-use/ObjectHistogram.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/class-use/ObjectHistogram.html
index cca3251..1997b4c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/class-use/ObjectHistogram.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/class-use/ObjectHistogram.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/class-use/ObjectHistogram.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.feature.ObjectHistogram (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.ArrayLikeObjectLabelVectorizer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.ArrayLikeObjectLabelVectorizer.html
index 661d106..04f1fab 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.ArrayLikeObjectLabelVectorizer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.ArrayLikeObjectLabelVectorizer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.ArrayLikeObjectLabelVectorizer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ExtractionUtils.ArrayLikeObjectLabelVectorizer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.ArrayLikeVectorizer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.ArrayLikeVectorizer.html
index bf4575a..b56daa8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.ArrayLikeVectorizer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.ArrayLikeVectorizer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.ArrayLikeVectorizer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ExtractionUtils.ArrayLikeVectorizer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.DefaultLabelVectorizer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.DefaultLabelVectorizer.html
index 8f42ce7..e839dad 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.DefaultLabelVectorizer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.DefaultLabelVectorizer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.DefaultLabelVectorizer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ExtractionUtils.DefaultLabelVectorizer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.IntCoordObjectLabelVectorizer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.IntCoordObjectLabelVectorizer.html
index 870155e..77c0577 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.IntCoordObjectLabelVectorizer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.IntCoordObjectLabelVectorizer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.IntCoordObjectLabelVectorizer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ExtractionUtils.IntCoordObjectLabelVectorizer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.IntCoordVectorizer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.IntCoordVectorizer.html
index df78a40..b3d1258 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.IntCoordVectorizer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.IntCoordVectorizer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.IntCoordVectorizer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ExtractionUtils.IntCoordVectorizer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.ObjectLabelVectorizer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.ObjectLabelVectorizer.html
index 757ca95..f6cd799 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.ObjectLabelVectorizer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.ObjectLabelVectorizer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.ObjectLabelVectorizer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ExtractionUtils.ObjectLabelVectorizer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.StringCoordVectorizer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.StringCoordVectorizer.html
index e96c337..7dcbd11 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.StringCoordVectorizer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.StringCoordVectorizer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.StringCoordVectorizer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ExtractionUtils.StringCoordVectorizer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.html
index 2a472ef..2d55303 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/ExtractionUtils.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ExtractionUtils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/Vectorizer.LabelCoordinate.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/Vectorizer.LabelCoordinate.html
index e7f25fd..2e8b6d1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/Vectorizer.LabelCoordinate.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/Vectorizer.LabelCoordinate.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/Vectorizer.LabelCoordinate.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Vectorizer.LabelCoordinate (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/Vectorizer.VectorizerAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/Vectorizer.VectorizerAdapter.html
index 09c8f29..215c0bb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/Vectorizer.VectorizerAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/Vectorizer.VectorizerAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/Vectorizer.VectorizerAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Vectorizer.VectorizerAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/Vectorizer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/Vectorizer.html
index 23128c3..59f1764 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/Vectorizer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/Vectorizer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/Vectorizer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Vectorizer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.ArrayLikeObjectLabelVectorizer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.ArrayLikeObjectLabelVectorizer.html
index ad843cb..fd2e7ad 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.ArrayLikeObjectLabelVectorizer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.ArrayLikeObjectLabelVectorizer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.ArrayLikeObjectLabelVectorizer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.feature.extractor.ExtractionUtils.ArrayLikeObjectLabelVectorizer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.ArrayLikeVectorizer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.ArrayLikeVectorizer.html
index eefb9fa..730d83f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.ArrayLikeVectorizer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.ArrayLikeVectorizer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.ArrayLikeVectorizer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.feature.extractor.ExtractionUtils.ArrayLikeVectorizer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.DefaultLabelVectorizer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.DefaultLabelVectorizer.html
index 1c3e4f0..a23bee5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.DefaultLabelVectorizer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.DefaultLabelVectorizer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.DefaultLabelVectorizer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.feature.extractor.ExtractionUtils.DefaultLabelVectorizer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.IntCoordObjectLabelVectorizer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.IntCoordObjectLabelVectorizer.html
index 198080a..02299fb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.IntCoordObjectLabelVectorizer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.IntCoordObjectLabelVectorizer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.IntCoordObjectLabelVectorizer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.feature.extractor.ExtractionUtils.IntCoordObjectLabelVectorizer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.IntCoordVectorizer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.IntCoordVectorizer.html
index 51bb8ed..4975397 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.IntCoordVectorizer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.IntCoordVectorizer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.IntCoordVectorizer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.feature.extractor.ExtractionUtils.IntCoordVectorizer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.ObjectLabelVectorizer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.ObjectLabelVectorizer.html
index c7ff2bd..d0874dd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.ObjectLabelVectorizer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.ObjectLabelVectorizer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.ObjectLabelVectorizer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.feature.extractor.ExtractionUtils.ObjectLabelVectorizer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.StringCoordVectorizer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.StringCoordVectorizer.html
index 1a1a30e..ec2abcb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.StringCoordVectorizer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.StringCoordVectorizer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.StringCoordVectorizer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.feature.extractor.ExtractionUtils.StringCoordVectorizer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.html
index 8dc1684..194e83a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/ExtractionUtils.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.feature.extractor.ExtractionUtils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/Vectorizer.LabelCoordinate.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/Vectorizer.LabelCoordinate.html
index 6129d0c..ebb407a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/Vectorizer.LabelCoordinate.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/Vectorizer.LabelCoordinate.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/Vectorizer.LabelCoordinate.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.feature.extractor.Vectorizer.LabelCoordinate (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/Vectorizer.VectorizerAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/Vectorizer.VectorizerAdapter.html
index 47c091d..e845dc0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/Vectorizer.VectorizerAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/Vectorizer.VectorizerAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/Vectorizer.VectorizerAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.feature.extractor.Vectorizer.VectorizerAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/Vectorizer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/Vectorizer.html
index 605db52..62c2f89 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/Vectorizer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/Vectorizer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/class-use/Vectorizer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.feature.extractor.Vectorizer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/BinaryObjectVectorizer.Mapping.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/BinaryObjectVectorizer.Mapping.html
index 5c9dfc6..15dc436 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/BinaryObjectVectorizer.Mapping.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/BinaryObjectVectorizer.Mapping.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/BinaryObjectVectorizer.Mapping.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BinaryObjectVectorizer.Mapping (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/BinaryObjectVectorizer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/BinaryObjectVectorizer.html
index 5552e4d..924e6a0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/BinaryObjectVectorizer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/BinaryObjectVectorizer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/BinaryObjectVectorizer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BinaryObjectVectorizer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/DoubleArrayVectorizer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/DoubleArrayVectorizer.html
index e453362..b929689 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/DoubleArrayVectorizer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/DoubleArrayVectorizer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/DoubleArrayVectorizer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DoubleArrayVectorizer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/DummyVectorizer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/DummyVectorizer.html
index 59f65e2..bbb9fcf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/DummyVectorizer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/DummyVectorizer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/DummyVectorizer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DummyVectorizer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/LabeledDummyVectorizer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/LabeledDummyVectorizer.html
index 62d50db..ba09f96 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/LabeledDummyVectorizer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/LabeledDummyVectorizer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/LabeledDummyVectorizer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LabeledDummyVectorizer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/ObjectArrayVectorizer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/ObjectArrayVectorizer.html
index 186a6bb..56ea98a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/ObjectArrayVectorizer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/ObjectArrayVectorizer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/ObjectArrayVectorizer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ObjectArrayVectorizer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/class-use/BinaryObjectVectorizer.Mapping.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/class-use/BinaryObjectVectorizer.Mapping.html
index d545e61..ab15b2e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/class-use/BinaryObjectVectorizer.Mapping.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/class-use/BinaryObjectVectorizer.Mapping.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/class-use/BinaryObjectVectorizer.Mapping.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.feature.extractor.impl.BinaryObjectVectorizer.Mapping (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/class-use/BinaryObjectVectorizer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/class-use/BinaryObjectVectorizer.html
index d205fed..f5c3e0c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/class-use/BinaryObjectVectorizer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/class-use/BinaryObjectVectorizer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/class-use/BinaryObjectVectorizer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.feature.extractor.impl.BinaryObjectVectorizer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/class-use/DoubleArrayVectorizer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/class-use/DoubleArrayVectorizer.html
index 3a5b3e4..d49e5c7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/class-use/DoubleArrayVectorizer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/class-use/DoubleArrayVectorizer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/class-use/DoubleArrayVectorizer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.feature.extractor.impl.DoubleArrayVectorizer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/class-use/DummyVectorizer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/class-use/DummyVectorizer.html
index 5881a2f..c694b7b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/class-use/DummyVectorizer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/class-use/DummyVectorizer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/class-use/DummyVectorizer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.feature.extractor.impl.DummyVectorizer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/class-use/LabeledDummyVectorizer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/class-use/LabeledDummyVectorizer.html
index 0c32106..05efa94 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/class-use/LabeledDummyVectorizer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/class-use/LabeledDummyVectorizer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/class-use/LabeledDummyVectorizer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.feature.extractor.impl.LabeledDummyVectorizer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/class-use/ObjectArrayVectorizer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/class-use/ObjectArrayVectorizer.html
index 6a31da2..b046196 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/class-use/ObjectArrayVectorizer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/class-use/ObjectArrayVectorizer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/class-use/ObjectArrayVectorizer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.feature.extractor.impl.ObjectArrayVectorizer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/package-frame.html
index 3b4e198..c14e04a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.feature.extractor.impl (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/package-summary.html
index 5cd1285..992724a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.feature.extractor.impl (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/package-tree.html
index 175a518..4e8db0d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.feature.extractor.impl Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/package-use.html
index e46203d..d19e9ae 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/impl/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.dataset.feature.extractor.impl (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/package-frame.html
index 4b2e4a6..363c856 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.feature.extractor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/package-summary.html
index 9bee0a9..21c8f6f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.feature.extractor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/package-tree.html
index a1617b7..b674f93 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.feature.extractor Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/package-use.html
index 97ecf5e..5225870 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/extractor/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/extractor/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.dataset.feature.extractor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/package-frame.html
index 8f0bbb6..1222faf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.feature (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/package-summary.html
index 81004f6..9fc2fbb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.feature (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/package-tree.html
index fd00230..742b955 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.feature Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/package-use.html
index 367cee9..b63dad7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/feature/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/feature/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.dataset.feature (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/BootstrappedDatasetBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/BootstrappedDatasetBuilder.html
index 354f8d5..fee11d9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/BootstrappedDatasetBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/BootstrappedDatasetBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/BootstrappedDatasetBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BootstrappedDatasetBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/BootstrappedDatasetPartition.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/BootstrappedDatasetPartition.html
index c45e3c3..25d51f4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/BootstrappedDatasetPartition.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/BootstrappedDatasetPartition.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/BootstrappedDatasetPartition.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BootstrappedDatasetPartition (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/BootstrappedVector.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/BootstrappedVector.html
index 42f8a4f..9941187 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/BootstrappedVector.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/BootstrappedVector.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/BootstrappedVector.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BootstrappedVector (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/class-use/BootstrappedDatasetBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/class-use/BootstrappedDatasetBuilder.html
index a2dc706..ef73cd2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/class-use/BootstrappedDatasetBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/class-use/BootstrappedDatasetBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/class-use/BootstrappedDatasetBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.impl.bootstrapping.BootstrappedDatasetBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/class-use/BootstrappedDatasetPartition.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/class-use/BootstrappedDatasetPartition.html
index acb7d4c..224e25e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/class-use/BootstrappedDatasetPartition.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/class-use/BootstrappedDatasetPartition.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/class-use/BootstrappedDatasetPartition.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.impl.bootstrapping.BootstrappedDatasetPartition (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/class-use/BootstrappedVector.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/class-use/BootstrappedVector.html
index e18aeb1..7d66c1f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/class-use/BootstrappedVector.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/class-use/BootstrappedVector.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/class-use/BootstrappedVector.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.impl.bootstrapping.BootstrappedVector (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/package-frame.html
index a682774..be76a9f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.impl.bootstrapping (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/package-summary.html
index 8f738f0..db7f188 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.impl.bootstrapping (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/package-tree.html
index 82efa75..6623f8f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.impl.bootstrapping Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/package-use.html
index 437e428..e369357 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/bootstrapping/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.dataset.impl.bootstrapping (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/CacheBasedDataset.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/CacheBasedDataset.html
index f19ad58..edcec1d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/CacheBasedDataset.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/CacheBasedDataset.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/cache/CacheBasedDataset.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheBasedDataset (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/CacheBasedDatasetBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/CacheBasedDatasetBuilder.html
index 0670435..f348d3a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/CacheBasedDatasetBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/CacheBasedDatasetBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/cache/CacheBasedDatasetBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheBasedDatasetBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/class-use/CacheBasedDataset.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/class-use/CacheBasedDataset.html
index 30698be..e560640 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/class-use/CacheBasedDataset.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/class-use/CacheBasedDataset.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/cache/class-use/CacheBasedDataset.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.impl.cache.CacheBasedDataset (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/class-use/CacheBasedDatasetBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/class-use/CacheBasedDatasetBuilder.html
index 3c12a83..7c9d21f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/class-use/CacheBasedDatasetBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/class-use/CacheBasedDatasetBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/cache/class-use/CacheBasedDatasetBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.impl.cache.CacheBasedDatasetBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/package-frame.html
index 257120e..1b68f39 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/cache/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.impl.cache (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/package-summary.html
index fc10891..66d3035 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/cache/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.impl.cache (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/package-tree.html
index 061ae14..c046b9f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/cache/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.impl.cache Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/package-use.html
index de58da2..d4eeef4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/cache/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.dataset.impl.cache (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/ComputeUtils.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/ComputeUtils.html
index ab32d62..47c563c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/ComputeUtils.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/ComputeUtils.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/ComputeUtils.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ComputeUtils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/DatasetAffinityFunctionWrapper.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/DatasetAffinityFunctionWrapper.html
index b333d3f..4f9d11a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/DatasetAffinityFunctionWrapper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/DatasetAffinityFunctionWrapper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/DatasetAffinityFunctionWrapper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DatasetAffinityFunctionWrapper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/IteratorWithConcurrentModificationChecker.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/IteratorWithConcurrentModificationChecker.html
index bd4b140..c26ff12 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/IteratorWithConcurrentModificationChecker.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/IteratorWithConcurrentModificationChecker.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/IteratorWithConcurrentModificationChecker.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IteratorWithConcurrentModificationChecker (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/class-use/ComputeUtils.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/class-use/ComputeUtils.html
index 406afdc..fd02ad7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/class-use/ComputeUtils.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/class-use/ComputeUtils.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/class-use/ComputeUtils.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.impl.cache.util.ComputeUtils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/class-use/DatasetAffinityFunctionWrapper.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/class-use/DatasetAffinityFunctionWrapper.html
index 348fee0..059e3a8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/class-use/DatasetAffinityFunctionWrapper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/class-use/DatasetAffinityFunctionWrapper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/class-use/DatasetAffinityFunctionWrapper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.impl.cache.util.DatasetAffinityFunctionWrapper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/class-use/IteratorWithConcurrentModificationChecker.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/class-use/IteratorWithConcurrentModificationChecker.html
index 4986b6a..ebe7411 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/class-use/IteratorWithConcurrentModificationChecker.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/class-use/IteratorWithConcurrentModificationChecker.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/class-use/IteratorWithConcurrentModificationChecker.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.impl.cache.util.IteratorWithConcurrentModificationChecker (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/package-frame.html
index 3c010ff..002a70a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.impl.cache.util (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/package-summary.html
index 39bb364..d6866b4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.impl.cache.util (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/package-tree.html
index 9ec2845..00d1132 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.impl.cache.util Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/package-use.html
index a9767bd..33bdbe1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/cache/util/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.dataset.impl.cache.util (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/local/LocalDataset.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/local/LocalDataset.html
index 7355e30..222400c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/local/LocalDataset.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/local/LocalDataset.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/local/LocalDataset.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LocalDataset (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/local/LocalDatasetBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/local/LocalDatasetBuilder.html
index f84315e..66f298b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/local/LocalDatasetBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/local/LocalDatasetBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/local/LocalDatasetBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LocalDatasetBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/local/class-use/LocalDataset.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/local/class-use/LocalDataset.html
index 84df1d4..2a7c5bd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/local/class-use/LocalDataset.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/local/class-use/LocalDataset.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/local/class-use/LocalDataset.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.impl.local.LocalDataset (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/local/class-use/LocalDatasetBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/local/class-use/LocalDatasetBuilder.html
index 185b8bc..3689e78 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/local/class-use/LocalDatasetBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/local/class-use/LocalDatasetBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/local/class-use/LocalDatasetBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.impl.local.LocalDatasetBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/local/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/local/package-frame.html
index 7202545..24773f0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/local/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/local/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/local/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.impl.local (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/local/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/local/package-summary.html
index e6dbbc0..69d6c26 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/local/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/local/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/local/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.impl.local (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/local/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/local/package-tree.html
index dc07e2a..e678517 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/local/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/local/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/local/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.impl.local Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/local/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/local/package-use.html
index e658856..a653b34 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/local/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/local/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/local/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.dataset.impl.local (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/package-frame.html
index e0f1303..d3456af 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.impl (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/package-summary.html
index 7c7c6dc..6cd8978 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.impl (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/package-tree.html
index c2b894a..5f6a1e6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.impl Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/package-use.html
index 30f9b39..a52626b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/impl/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/impl/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.dataset.impl (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/package-frame.html
index 3a77a85..49e5772 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/package-summary.html
index 9462e81..6ffb7b2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/package-tree.html
index c4e15d1..c1c14a8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/package-use.html
index 838fce0..e2d624b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.dataset (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/DatasetWrapper.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/DatasetWrapper.html
index 7cefffe..d0d58f7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/DatasetWrapper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/DatasetWrapper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/DatasetWrapper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DatasetWrapper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/FeatureMatrixWithLabelsOnHeapData.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/FeatureMatrixWithLabelsOnHeapData.html
index 37611c1..e759761 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/FeatureMatrixWithLabelsOnHeapData.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/FeatureMatrixWithLabelsOnHeapData.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/FeatureMatrixWithLabelsOnHeapData.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>FeatureMatrixWithLabelsOnHeapData (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/FeatureMatrixWithLabelsOnHeapDataBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/FeatureMatrixWithLabelsOnHeapDataBuilder.html
index 149fc35..633123b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/FeatureMatrixWithLabelsOnHeapDataBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/FeatureMatrixWithLabelsOnHeapDataBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/FeatureMatrixWithLabelsOnHeapDataBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>FeatureMatrixWithLabelsOnHeapDataBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/SimpleDataset.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/SimpleDataset.html
index b48f013..497dc48 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/SimpleDataset.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/SimpleDataset.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/SimpleDataset.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SimpleDataset (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/SimpleLabeledDataset.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/SimpleLabeledDataset.html
index dd7207d..e0a0f7c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/SimpleLabeledDataset.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/SimpleLabeledDataset.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/SimpleLabeledDataset.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SimpleLabeledDataset (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/context/EmptyContextBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/context/EmptyContextBuilder.html
index cd1c38f..2c71663 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/context/EmptyContextBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/context/EmptyContextBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/builder/context/EmptyContextBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>EmptyContextBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/context/class-use/EmptyContextBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/context/class-use/EmptyContextBuilder.html
index b0c37a8..ced2088 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/context/class-use/EmptyContextBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/context/class-use/EmptyContextBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/builder/context/class-use/EmptyContextBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.primitive.builder.context.EmptyContextBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/context/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/context/package-frame.html
index 4854492..24b07b1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/context/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/context/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/builder/context/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.primitive.builder.context (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/context/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/context/package-summary.html
index ce99ab4..45885fc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/context/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/context/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/builder/context/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.primitive.builder.context (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/context/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/context/package-tree.html
index b5a7783..29dc8a4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/context/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/context/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/builder/context/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.primitive.builder.context Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/context/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/context/package-use.html
index 71fb617..c097803 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/context/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/context/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/builder/context/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.dataset.primitive.builder.context (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/SimpleDatasetDataBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/SimpleDatasetDataBuilder.html
index 29791e5..8f15537 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/SimpleDatasetDataBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/SimpleDatasetDataBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/SimpleDatasetDataBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SimpleDatasetDataBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/SimpleLabeledDatasetDataBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/SimpleLabeledDatasetDataBuilder.html
index 4d5291d..f76aa6c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/SimpleLabeledDatasetDataBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/SimpleLabeledDatasetDataBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/SimpleLabeledDatasetDataBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SimpleLabeledDatasetDataBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/class-use/SimpleDatasetDataBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/class-use/SimpleDatasetDataBuilder.html
index db6b4e7..b8eac72 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/class-use/SimpleDatasetDataBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/class-use/SimpleDatasetDataBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/class-use/SimpleDatasetDataBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.primitive.builder.data.SimpleDatasetDataBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/class-use/SimpleLabeledDatasetDataBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/class-use/SimpleLabeledDatasetDataBuilder.html
index 2e04892..34b66a3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/class-use/SimpleLabeledDatasetDataBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/class-use/SimpleLabeledDatasetDataBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/class-use/SimpleLabeledDatasetDataBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.primitive.builder.data.SimpleLabeledDatasetDataBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/package-frame.html
index 86c1ff9..20af6c7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.primitive.builder.data (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/package-summary.html
index eef0242..b47e332 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.primitive.builder.data (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/package-tree.html
index 777bb44..14dd308 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.primitive.builder.data Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/package-use.html
index 28acf34..42cb9bc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/builder/data/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.dataset.primitive.builder.data (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/package-frame.html
index 7f300a3..2e97acb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/builder/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.primitive.builder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/package-summary.html
index 200adc9..1b44fe1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/builder/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.primitive.builder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/package-tree.html
index 099216e..f53c844 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/builder/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.primitive.builder Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/package-use.html
index aaf3cab..077889c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/builder/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/builder/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.dataset.primitive.builder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/class-use/DatasetWrapper.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/class-use/DatasetWrapper.html
index c09d267..ff030aa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/class-use/DatasetWrapper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/class-use/DatasetWrapper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/class-use/DatasetWrapper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.primitive.DatasetWrapper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/class-use/FeatureMatrixWithLabelsOnHeapData.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/class-use/FeatureMatrixWithLabelsOnHeapData.html
index 565ea27..431dbf3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/class-use/FeatureMatrixWithLabelsOnHeapData.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/class-use/FeatureMatrixWithLabelsOnHeapData.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/class-use/FeatureMatrixWithLabelsOnHeapData.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.primitive.FeatureMatrixWithLabelsOnHeapData (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/class-use/FeatureMatrixWithLabelsOnHeapDataBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/class-use/FeatureMatrixWithLabelsOnHeapDataBuilder.html
index bcbad5e..90f3bf5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/class-use/FeatureMatrixWithLabelsOnHeapDataBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/class-use/FeatureMatrixWithLabelsOnHeapDataBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/class-use/FeatureMatrixWithLabelsOnHeapDataBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.primitive.FeatureMatrixWithLabelsOnHeapDataBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/class-use/SimpleDataset.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/class-use/SimpleDataset.html
index 9fb41d4..d6cfd24 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/class-use/SimpleDataset.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/class-use/SimpleDataset.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/class-use/SimpleDataset.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.primitive.SimpleDataset (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/class-use/SimpleLabeledDataset.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/class-use/SimpleLabeledDataset.html
index 11a70a5..745279a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/class-use/SimpleLabeledDataset.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/class-use/SimpleLabeledDataset.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/class-use/SimpleLabeledDataset.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.primitive.SimpleLabeledDataset (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/context/EmptyContext.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/context/EmptyContext.html
index e473cd3..9a29081 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/context/EmptyContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/context/EmptyContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/context/EmptyContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>EmptyContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/context/class-use/EmptyContext.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/context/class-use/EmptyContext.html
index 2197823..b9a8844 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/context/class-use/EmptyContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/context/class-use/EmptyContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/context/class-use/EmptyContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.primitive.context.EmptyContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/context/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/context/package-frame.html
index 1af89cc..b00aee6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/context/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/context/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/context/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.primitive.context (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/context/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/context/package-summary.html
index 9e77a87..3c0fbaa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/context/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/context/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/context/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.primitive.context (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/context/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/context/package-tree.html
index b1d8bce..bb11c1d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/context/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/context/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/context/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.primitive.context Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/context/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/context/package-use.html
index 54f5c27..deb4106 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/context/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/context/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/context/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.dataset.primitive.context (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/data/SimpleDatasetData.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/data/SimpleDatasetData.html
index bc6d3ac..e5902d4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/data/SimpleDatasetData.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/data/SimpleDatasetData.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/data/SimpleDatasetData.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SimpleDatasetData (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/data/SimpleLabeledDatasetData.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/data/SimpleLabeledDatasetData.html
index bb3acf4..d00e4f6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/data/SimpleLabeledDatasetData.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/data/SimpleLabeledDatasetData.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/data/SimpleLabeledDatasetData.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SimpleLabeledDatasetData (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/data/class-use/SimpleDatasetData.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/data/class-use/SimpleDatasetData.html
index 7dd8d1d..eefb974 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/data/class-use/SimpleDatasetData.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/data/class-use/SimpleDatasetData.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/data/class-use/SimpleDatasetData.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.primitive.data.SimpleDatasetData (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/data/class-use/SimpleLabeledDatasetData.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/data/class-use/SimpleLabeledDatasetData.html
index 4981172..26c9205 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/data/class-use/SimpleLabeledDatasetData.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/data/class-use/SimpleLabeledDatasetData.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/data/class-use/SimpleLabeledDatasetData.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.dataset.primitive.data.SimpleLabeledDatasetData (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/data/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/data/package-frame.html
index 6c752e2..6a04744 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/data/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/data/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/data/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.primitive.data (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/data/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/data/package-summary.html
index 1b6524d..61be411 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/data/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/data/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/data/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.primitive.data (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/data/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/data/package-tree.html
index a2546af..271170a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/data/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/data/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/data/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.primitive.data Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/data/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/data/package-use.html
index d5d7e2c..0f4de84 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/data/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/data/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/data/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.dataset.primitive.data (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/package-frame.html
index d354b0b..f6af9a8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.primitive (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/package-summary.html
index 2d7778d..87a9261 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.primitive (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/package-tree.html
index 6922249..eea623f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.dataset.primitive Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/package-use.html
index 2bc39fc..2891cdf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/dataset/primitive/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/dataset/primitive/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.dataset.primitive (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/DefaultLearningEnvironmentBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/DefaultLearningEnvironmentBuilder.html
index a9f0963..e68fb9a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/DefaultLearningEnvironmentBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/DefaultLearningEnvironmentBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/DefaultLearningEnvironmentBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DefaultLearningEnvironmentBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/LearningEnvironment.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/LearningEnvironment.html
index e3fe2e9..ed9a025 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/LearningEnvironment.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/LearningEnvironment.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/LearningEnvironment.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LearningEnvironment (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/LearningEnvironmentBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/LearningEnvironmentBuilder.html
index 454e292..dc7b250 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/LearningEnvironmentBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/LearningEnvironmentBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/LearningEnvironmentBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LearningEnvironmentBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/class-use/DefaultLearningEnvironmentBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/class-use/DefaultLearningEnvironmentBuilder.html
index c3752e3..4af77d9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/class-use/DefaultLearningEnvironmentBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/class-use/DefaultLearningEnvironmentBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/class-use/DefaultLearningEnvironmentBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.environment.DefaultLearningEnvironmentBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/class-use/LearningEnvironment.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/class-use/LearningEnvironment.html
index d6d39c3..337b685 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/class-use/LearningEnvironment.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/class-use/LearningEnvironment.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/class-use/LearningEnvironment.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.environment.LearningEnvironment (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/class-use/LearningEnvironmentBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/class-use/LearningEnvironmentBuilder.html
index 0fe7130..c505a09 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/class-use/LearningEnvironmentBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/class-use/LearningEnvironmentBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/class-use/LearningEnvironmentBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.environment.LearningEnvironmentBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/DeployableObject.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/DeployableObject.html
index 94b60cc..15ab90b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/DeployableObject.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/DeployableObject.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/deploy/DeployableObject.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DeployableObject (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/DeployingContext.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/DeployingContext.html
index 53fd8a3..3a1b143 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/DeployingContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/DeployingContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/deploy/DeployingContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DeployingContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/DeployingContextImpl.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/DeployingContextImpl.html
index e17e433..a9b3e66 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/DeployingContextImpl.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/DeployingContextImpl.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/deploy/DeployingContextImpl.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DeployingContextImpl (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/class-use/DeployableObject.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/class-use/DeployableObject.html
index 6e592fa..669fb01 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/class-use/DeployableObject.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/class-use/DeployableObject.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/deploy/class-use/DeployableObject.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.environment.deploy.DeployableObject (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/class-use/DeployingContext.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/class-use/DeployingContext.html
index 2f1f859..2cfd60d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/class-use/DeployingContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/class-use/DeployingContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/deploy/class-use/DeployingContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.environment.deploy.DeployingContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/class-use/DeployingContextImpl.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/class-use/DeployingContextImpl.html
index 2815bf4..f3e178c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/class-use/DeployingContextImpl.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/class-use/DeployingContextImpl.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/deploy/class-use/DeployingContextImpl.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.environment.deploy.DeployingContextImpl (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/package-frame.html
index 8dae501..801ee0b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/deploy/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.environment.deploy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/package-summary.html
index ad7f560..4d000b7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/deploy/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.environment.deploy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/package-tree.html
index d525f13..4488fff 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/deploy/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.environment.deploy Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/package-use.html
index ca462c4..33785a9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/deploy/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/deploy/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.environment.deploy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/ConsoleLogger.Factory.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/ConsoleLogger.Factory.html
index ea9a559..497990b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/ConsoleLogger.Factory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/ConsoleLogger.Factory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/logging/ConsoleLogger.Factory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ConsoleLogger.Factory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/ConsoleLogger.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/ConsoleLogger.html
index 9129cc6..35958b6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/ConsoleLogger.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/ConsoleLogger.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/logging/ConsoleLogger.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ConsoleLogger (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/CustomMLLogger.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/CustomMLLogger.html
index 2d0c54e..073969d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/CustomMLLogger.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/CustomMLLogger.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/logging/CustomMLLogger.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CustomMLLogger (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/MLLogger.Factory.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/MLLogger.Factory.html
index 8eaa8e6..5cdc958 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/MLLogger.Factory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/MLLogger.Factory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/logging/MLLogger.Factory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MLLogger.Factory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/MLLogger.VerboseLevel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/MLLogger.VerboseLevel.html
index c8fb138..4c79f11 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/MLLogger.VerboseLevel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/MLLogger.VerboseLevel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/logging/MLLogger.VerboseLevel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MLLogger.VerboseLevel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/MLLogger.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/MLLogger.html
index d6c4f5e..138eff0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/MLLogger.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/MLLogger.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/logging/MLLogger.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MLLogger (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/NoOpLogger.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/NoOpLogger.html
index 0dad4d5..495378c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/NoOpLogger.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/NoOpLogger.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/logging/NoOpLogger.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NoOpLogger (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/class-use/ConsoleLogger.Factory.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/class-use/ConsoleLogger.Factory.html
index 1bef991..e024b9d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/class-use/ConsoleLogger.Factory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/class-use/ConsoleLogger.Factory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/logging/class-use/ConsoleLogger.Factory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.environment.logging.ConsoleLogger.Factory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/class-use/ConsoleLogger.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/class-use/ConsoleLogger.html
index e95b2fb..6e2935e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/class-use/ConsoleLogger.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/class-use/ConsoleLogger.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/logging/class-use/ConsoleLogger.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.environment.logging.ConsoleLogger (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/class-use/CustomMLLogger.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/class-use/CustomMLLogger.html
index fbca963..3acd52b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/class-use/CustomMLLogger.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/class-use/CustomMLLogger.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/logging/class-use/CustomMLLogger.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.environment.logging.CustomMLLogger (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/class-use/MLLogger.Factory.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/class-use/MLLogger.Factory.html
index 963a5e1..6af3470 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/class-use/MLLogger.Factory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/class-use/MLLogger.Factory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/logging/class-use/MLLogger.Factory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.environment.logging.MLLogger.Factory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/class-use/MLLogger.VerboseLevel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/class-use/MLLogger.VerboseLevel.html
index 8141f22..f748e6c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/class-use/MLLogger.VerboseLevel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/class-use/MLLogger.VerboseLevel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/logging/class-use/MLLogger.VerboseLevel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.environment.logging.MLLogger.VerboseLevel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/class-use/MLLogger.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/class-use/MLLogger.html
index 7ebd147..7495fb6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/class-use/MLLogger.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/class-use/MLLogger.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/logging/class-use/MLLogger.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.environment.logging.MLLogger (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/class-use/NoOpLogger.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/class-use/NoOpLogger.html
index f978b44..2a56567 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/class-use/NoOpLogger.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/class-use/NoOpLogger.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/logging/class-use/NoOpLogger.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.environment.logging.NoOpLogger (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/package-frame.html
index e165d68..ab1d81f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/logging/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.environment.logging (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/package-summary.html
index dfe6433..96fbb7d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/logging/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.environment.logging (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/package-tree.html
index 504da92..ec3e7aa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/logging/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.environment.logging Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/package-use.html
index bd25540..b02a373 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/logging/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/logging/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.environment.logging (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/package-frame.html
index 525d2ac..99bd125 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.environment (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/package-summary.html
index 323c5aa..44ee9bc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.environment (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/package-tree.html
index 9511f61..13854d3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.environment Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/package-use.html
index 0583894..f26232d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.environment (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/DefaultParallelismStrategy.FutureWrapper.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/DefaultParallelismStrategy.FutureWrapper.html
index 9ea48bd..bf1d919 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/DefaultParallelismStrategy.FutureWrapper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/DefaultParallelismStrategy.FutureWrapper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/parallelism/DefaultParallelismStrategy.FutureWrapper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DefaultParallelismStrategy.FutureWrapper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/DefaultParallelismStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/DefaultParallelismStrategy.html
index f0dea0a..f626b21 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/DefaultParallelismStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/DefaultParallelismStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/parallelism/DefaultParallelismStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DefaultParallelismStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/NoParallelismStrategy.Stub.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/NoParallelismStrategy.Stub.html
index 3be0f36..37b0332 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/NoParallelismStrategy.Stub.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/NoParallelismStrategy.Stub.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/parallelism/NoParallelismStrategy.Stub.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NoParallelismStrategy.Stub (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/NoParallelismStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/NoParallelismStrategy.html
index d8b36ad..3ce84d7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/NoParallelismStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/NoParallelismStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/parallelism/NoParallelismStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NoParallelismStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/ParallelismStrategy.Type.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/ParallelismStrategy.Type.html
index 6d78757..7e45cf9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/ParallelismStrategy.Type.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/ParallelismStrategy.Type.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/parallelism/ParallelismStrategy.Type.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ParallelismStrategy.Type (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/ParallelismStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/ParallelismStrategy.html
index bf827a6..77ef512 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/ParallelismStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/ParallelismStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/parallelism/ParallelismStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ParallelismStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/Promise.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/Promise.html
index ae1ed9c..8789698 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/Promise.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/Promise.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/parallelism/Promise.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Promise (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/class-use/DefaultParallelismStrategy.FutureWrapper.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/class-use/DefaultParallelismStrategy.FutureWrapper.html
index 128fead..be0fac7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/class-use/DefaultParallelismStrategy.FutureWrapper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/class-use/DefaultParallelismStrategy.FutureWrapper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/parallelism/class-use/DefaultParallelismStrategy.FutureWrapper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.environment.parallelism.DefaultParallelismStrategy.FutureWrapper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/class-use/DefaultParallelismStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/class-use/DefaultParallelismStrategy.html
index ca2cef4..2266759 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/class-use/DefaultParallelismStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/class-use/DefaultParallelismStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/parallelism/class-use/DefaultParallelismStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.environment.parallelism.DefaultParallelismStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/class-use/NoParallelismStrategy.Stub.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/class-use/NoParallelismStrategy.Stub.html
index 2c5fc99..0290798 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/class-use/NoParallelismStrategy.Stub.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/class-use/NoParallelismStrategy.Stub.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/parallelism/class-use/NoParallelismStrategy.Stub.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.environment.parallelism.NoParallelismStrategy.Stub (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/class-use/NoParallelismStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/class-use/NoParallelismStrategy.html
index 735782a..8a8d106 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/class-use/NoParallelismStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/class-use/NoParallelismStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/parallelism/class-use/NoParallelismStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.environment.parallelism.NoParallelismStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/class-use/ParallelismStrategy.Type.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/class-use/ParallelismStrategy.Type.html
index fa57b4e..380e10d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/class-use/ParallelismStrategy.Type.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/class-use/ParallelismStrategy.Type.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/parallelism/class-use/ParallelismStrategy.Type.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.environment.parallelism.ParallelismStrategy.Type (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/class-use/ParallelismStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/class-use/ParallelismStrategy.html
index 4df8bce..95048a0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/class-use/ParallelismStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/class-use/ParallelismStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/parallelism/class-use/ParallelismStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.environment.parallelism.ParallelismStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/class-use/Promise.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/class-use/Promise.html
index d2b47b2..c52575c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/class-use/Promise.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/class-use/Promise.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/parallelism/class-use/Promise.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.environment.parallelism.Promise (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/package-frame.html
index 5cdc07a..6dffc73 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/parallelism/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.environment.parallelism (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/package-summary.html
index 6a79a82..86a5dcf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/parallelism/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.environment.parallelism (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/package-tree.html
index 7552a35..ff7aa88 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/parallelism/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.environment.parallelism Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/package-use.html
index 49840c4..b27b926 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/environment/parallelism/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/environment/parallelism/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.environment.parallelism (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/h2o/H2OMojoModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/h2o/H2OMojoModel.html
index 9ba1962..13c0c7a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/h2o/H2OMojoModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/h2o/H2OMojoModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/h2o/H2OMojoModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>H2OMojoModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/h2o/H2OMojoModelParser.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/h2o/H2OMojoModelParser.html
index fbe33a7..99d27b3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/h2o/H2OMojoModelParser.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/h2o/H2OMojoModelParser.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/h2o/H2OMojoModelParser.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>H2OMojoModelParser (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/h2o/class-use/H2OMojoModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/h2o/class-use/H2OMojoModel.html
index f28355c..3da28cd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/h2o/class-use/H2OMojoModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/h2o/class-use/H2OMojoModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/h2o/class-use/H2OMojoModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.h2o.H2OMojoModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/h2o/class-use/H2OMojoModelParser.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/h2o/class-use/H2OMojoModelParser.html
index 1047e04..f42d0b5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/h2o/class-use/H2OMojoModelParser.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/h2o/class-use/H2OMojoModelParser.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/h2o/class-use/H2OMojoModelParser.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.h2o.H2OMojoModelParser (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/h2o/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/h2o/package-frame.html
index 0f76bfd..6ff60a4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/h2o/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/h2o/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/h2o/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.h2o (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/h2o/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/h2o/package-summary.html
index 29075ad..165ccc6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/h2o/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/h2o/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/h2o/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.h2o (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/h2o/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/h2o/package-tree.html
index 54ec8d5..97edb01 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/h2o/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/h2o/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/h2o/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.h2o Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/h2o/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/h2o/package-use.html
index 0004139..e28300e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/h2o/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/h2o/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/h2o/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.h2o (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/IgniteModelStorageUtil.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/IgniteModelStorageUtil.html
index 41e3b74..ac036cc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/IgniteModelStorageUtil.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/IgniteModelStorageUtil.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/IgniteModelStorageUtil.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteModelStorageUtil (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/Model.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/Model.html
index 061c1e1..45a55ac 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/Model.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/Model.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/Model.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Model (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/ModelDescriptor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/ModelDescriptor.html
index 2c3379f..9126a29 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/ModelDescriptor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/ModelDescriptor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/ModelDescriptor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ModelDescriptor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/ModelSignature.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/ModelSignature.html
index c2cf6e0..1d0d553 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/ModelSignature.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/ModelSignature.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/ModelSignature.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ModelSignature (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/AsyncModelBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/AsyncModelBuilder.html
index e4f909f..6c14618 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/AsyncModelBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/AsyncModelBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/builder/AsyncModelBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>AsyncModelBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/IgniteDistributedModelBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/IgniteDistributedModelBuilder.html
index b4feb01..2015794 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/IgniteDistributedModelBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/IgniteDistributedModelBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/builder/IgniteDistributedModelBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteDistributedModelBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/SingleModelBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/SingleModelBuilder.html
index b1880af..627f017 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/SingleModelBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/SingleModelBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/builder/SingleModelBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SingleModelBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/SyncModelBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/SyncModelBuilder.html
index 4de4ce6..cde4fcb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/SyncModelBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/SyncModelBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/builder/SyncModelBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SyncModelBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/ThreadedModelBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/ThreadedModelBuilder.html
index 7c0621b..a9a5d11 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/ThreadedModelBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/ThreadedModelBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/builder/ThreadedModelBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ThreadedModelBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/class-use/AsyncModelBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/class-use/AsyncModelBuilder.html
index a58ac28..a299583 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/class-use/AsyncModelBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/class-use/AsyncModelBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/builder/class-use/AsyncModelBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.inference.builder.AsyncModelBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/class-use/IgniteDistributedModelBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/class-use/IgniteDistributedModelBuilder.html
index 2d7ce1f..dc82177 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/class-use/IgniteDistributedModelBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/class-use/IgniteDistributedModelBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/builder/class-use/IgniteDistributedModelBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.inference.builder.IgniteDistributedModelBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/class-use/SingleModelBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/class-use/SingleModelBuilder.html
index 8705e09..748e5f7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/class-use/SingleModelBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/class-use/SingleModelBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/builder/class-use/SingleModelBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.inference.builder.SingleModelBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/class-use/SyncModelBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/class-use/SyncModelBuilder.html
index a7caec1..c48c131 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/class-use/SyncModelBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/class-use/SyncModelBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/builder/class-use/SyncModelBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.inference.builder.SyncModelBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/class-use/ThreadedModelBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/class-use/ThreadedModelBuilder.html
index ec1f593..22ddb08 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/class-use/ThreadedModelBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/class-use/ThreadedModelBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/builder/class-use/ThreadedModelBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.inference.builder.ThreadedModelBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/package-frame.html
index f4fa5f1..5dc06f8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/builder/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.inference.builder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/package-summary.html
index c7b1e68..0006d24 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/builder/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.inference.builder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/package-tree.html
index 7b9c7fc..9e942b3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/builder/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.inference.builder Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/package-use.html
index 3ca684f..8efa8aa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/builder/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/builder/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.inference.builder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/class-use/IgniteModelStorageUtil.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/class-use/IgniteModelStorageUtil.html
index 76ecda6..9bd5428 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/class-use/IgniteModelStorageUtil.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/class-use/IgniteModelStorageUtil.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/class-use/IgniteModelStorageUtil.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.inference.IgniteModelStorageUtil (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/class-use/Model.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/class-use/Model.html
index 3d34a3f..75b25ef 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/class-use/Model.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/class-use/Model.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/class-use/Model.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.inference.Model (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/class-use/ModelDescriptor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/class-use/ModelDescriptor.html
index 18f947c..76c252c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/class-use/ModelDescriptor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/class-use/ModelDescriptor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/class-use/ModelDescriptor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.inference.ModelDescriptor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/class-use/ModelSignature.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/class-use/ModelSignature.html
index 1af565c..b972fcb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/class-use/ModelSignature.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/class-use/ModelSignature.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/class-use/ModelSignature.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.inference.ModelSignature (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/package-frame.html
index 7164fef..3381a1d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.inference (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/package-summary.html
index dd8b414..80c2de3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.inference (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/package-tree.html
index 4a575cb..81dfdfb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.inference Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/package-use.html
index f039088..da06ff9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.inference (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/parser/IgniteModelParser.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/parser/IgniteModelParser.html
index 6ece654..fbe1c8c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/parser/IgniteModelParser.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/parser/IgniteModelParser.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/parser/IgniteModelParser.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteModelParser (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/parser/ModelParser.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/parser/ModelParser.html
index f1b1a33..b69a003 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/parser/ModelParser.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/parser/ModelParser.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/parser/ModelParser.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ModelParser (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/parser/class-use/IgniteModelParser.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/parser/class-use/IgniteModelParser.html
index 305926a..87770a1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/parser/class-use/IgniteModelParser.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/parser/class-use/IgniteModelParser.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/parser/class-use/IgniteModelParser.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.inference.parser.IgniteModelParser (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/parser/class-use/ModelParser.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/parser/class-use/ModelParser.html
index cfa7618..9d7d79a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/parser/class-use/ModelParser.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/parser/class-use/ModelParser.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/parser/class-use/ModelParser.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.inference.parser.ModelParser (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/parser/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/parser/package-frame.html
index cbb7d19..b6268ae 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/parser/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/parser/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/parser/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.inference.parser (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/parser/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/parser/package-summary.html
index 477c103..139bc29 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/parser/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/parser/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/parser/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.inference.parser (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/parser/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/parser/package-tree.html
index 4ea6851..8c9ea41 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/parser/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/parser/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/parser/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.inference.parser Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/parser/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/parser/package-use.html
index c083390..ad6d0d7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/parser/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/parser/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/parser/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.inference.parser (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/FileSystemModelReader.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/FileSystemModelReader.html
index 42f9550..5c1095a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/FileSystemModelReader.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/FileSystemModelReader.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/reader/FileSystemModelReader.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>FileSystemModelReader (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/InMemoryModelReader.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/InMemoryModelReader.html
index 0b3c1d5..629c17d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/InMemoryModelReader.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/InMemoryModelReader.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/reader/InMemoryModelReader.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>InMemoryModelReader (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/ModelReader.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/ModelReader.html
index 8308353..5f5d005 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/ModelReader.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/ModelReader.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/reader/ModelReader.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ModelReader (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/ModelStorageModelReader.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/ModelStorageModelReader.html
index 77dbcc8..fdbed8c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/ModelStorageModelReader.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/ModelStorageModelReader.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/reader/ModelStorageModelReader.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ModelStorageModelReader (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/class-use/FileSystemModelReader.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/class-use/FileSystemModelReader.html
index 7697b5f..981a828 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/class-use/FileSystemModelReader.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/class-use/FileSystemModelReader.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/reader/class-use/FileSystemModelReader.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.inference.reader.FileSystemModelReader (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/class-use/InMemoryModelReader.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/class-use/InMemoryModelReader.html
index fe23b79..df57492 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/class-use/InMemoryModelReader.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/class-use/InMemoryModelReader.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/reader/class-use/InMemoryModelReader.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.inference.reader.InMemoryModelReader (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/class-use/ModelReader.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/class-use/ModelReader.html
index 6a70f72..6294666 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/class-use/ModelReader.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/class-use/ModelReader.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/reader/class-use/ModelReader.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.inference.reader.ModelReader (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/class-use/ModelStorageModelReader.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/class-use/ModelStorageModelReader.html
index 43d784c..6a37ede 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/class-use/ModelStorageModelReader.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/class-use/ModelStorageModelReader.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/reader/class-use/ModelStorageModelReader.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.inference.reader.ModelStorageModelReader (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/package-frame.html
index 1da4db7..222fc00 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/reader/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.inference.reader (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/package-summary.html
index 368f235..0e2aced 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/reader/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.inference.reader (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/package-tree.html
index a02e236..c532f4c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/reader/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.inference.reader Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/package-use.html
index d299ff1..66fecdb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/reader/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/reader/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.inference.reader (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/IgniteModelDescriptorStorage.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/IgniteModelDescriptorStorage.html
index a9de567..e99e0e5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/IgniteModelDescriptorStorage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/IgniteModelDescriptorStorage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/storage/descriptor/IgniteModelDescriptorStorage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteModelDescriptorStorage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/LocalModelDescriptorStorage.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/LocalModelDescriptorStorage.html
index d0ce12a..a76c051 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/LocalModelDescriptorStorage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/LocalModelDescriptorStorage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/storage/descriptor/LocalModelDescriptorStorage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LocalModelDescriptorStorage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/ModelDescriptorStorage.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/ModelDescriptorStorage.html
index a5aebca..e93a8b2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/ModelDescriptorStorage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/ModelDescriptorStorage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/storage/descriptor/ModelDescriptorStorage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ModelDescriptorStorage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/ModelDescriptorStorageFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/ModelDescriptorStorageFactory.html
index a9bb8c9..9b3c936 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/ModelDescriptorStorageFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/ModelDescriptorStorageFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/storage/descriptor/ModelDescriptorStorageFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ModelDescriptorStorageFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/class-use/IgniteModelDescriptorStorage.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/class-use/IgniteModelDescriptorStorage.html
index 5ea4474..4b8e3e9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/class-use/IgniteModelDescriptorStorage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/class-use/IgniteModelDescriptorStorage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/storage/descriptor/class-use/IgniteModelDescriptorStorage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.inference.storage.descriptor.IgniteModelDescriptorStorage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/class-use/LocalModelDescriptorStorage.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/class-use/LocalModelDescriptorStorage.html
index e8b08b2..7c1b61e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/class-use/LocalModelDescriptorStorage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/class-use/LocalModelDescriptorStorage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/storage/descriptor/class-use/LocalModelDescriptorStorage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.inference.storage.descriptor.LocalModelDescriptorStorage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/class-use/ModelDescriptorStorage.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/class-use/ModelDescriptorStorage.html
index cd3494f..d2ccf41 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/class-use/ModelDescriptorStorage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/class-use/ModelDescriptorStorage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/storage/descriptor/class-use/ModelDescriptorStorage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.inference.storage.descriptor.ModelDescriptorStorage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/class-use/ModelDescriptorStorageFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/class-use/ModelDescriptorStorageFactory.html
index 3bf581d..548450c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/class-use/ModelDescriptorStorageFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/class-use/ModelDescriptorStorageFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/storage/descriptor/class-use/ModelDescriptorStorageFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.inference.storage.descriptor.ModelDescriptorStorageFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/package-frame.html
index 0a41831..c53d4ad 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/storage/descriptor/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.inference.storage.descriptor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/package-summary.html
index 5e36b13..3a6eb66 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/storage/descriptor/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.inference.storage.descriptor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/package-tree.html
index 984de1e..4f7edd6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/storage/descriptor/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.inference.storage.descriptor Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/package-use.html
index 6c3b2f9..4a1d96c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/descriptor/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/storage/descriptor/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.inference.storage.descriptor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/DefaultModelStorage.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/DefaultModelStorage.html
index 6815e16..34e441f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/DefaultModelStorage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/DefaultModelStorage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/storage/model/DefaultModelStorage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DefaultModelStorage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/FileOrDirectory.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/FileOrDirectory.html
index f406d6c..4023dd6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/FileOrDirectory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/FileOrDirectory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/storage/model/FileOrDirectory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>FileOrDirectory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/IgniteModelStorageProvider.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/IgniteModelStorageProvider.html
index 8ab7d94..23910f0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/IgniteModelStorageProvider.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/IgniteModelStorageProvider.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/storage/model/IgniteModelStorageProvider.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteModelStorageProvider (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/LocalModelStorageProvider.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/LocalModelStorageProvider.html
index 7db5ecb..7c9f2ab 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/LocalModelStorageProvider.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/LocalModelStorageProvider.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/storage/model/LocalModelStorageProvider.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LocalModelStorageProvider (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/ModelStorage.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/ModelStorage.html
index f0eb296..4ac1bbc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/ModelStorage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/ModelStorage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/storage/model/ModelStorage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ModelStorage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/ModelStorageFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/ModelStorageFactory.html
index b2563e3..0f70af5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/ModelStorageFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/ModelStorageFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/storage/model/ModelStorageFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ModelStorageFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/ModelStorageProvider.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/ModelStorageProvider.html
index 64c0b3a..5146eeb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/ModelStorageProvider.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/ModelStorageProvider.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/storage/model/ModelStorageProvider.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ModelStorageProvider (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/class-use/DefaultModelStorage.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/class-use/DefaultModelStorage.html
index a79aef4..fda7483 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/class-use/DefaultModelStorage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/class-use/DefaultModelStorage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/storage/model/class-use/DefaultModelStorage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.inference.storage.model.DefaultModelStorage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/class-use/FileOrDirectory.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/class-use/FileOrDirectory.html
index d6770c8..9f6be19 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/class-use/FileOrDirectory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/class-use/FileOrDirectory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/storage/model/class-use/FileOrDirectory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.inference.storage.model.FileOrDirectory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/class-use/IgniteModelStorageProvider.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/class-use/IgniteModelStorageProvider.html
index d347b50..4d1771e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/class-use/IgniteModelStorageProvider.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/class-use/IgniteModelStorageProvider.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/storage/model/class-use/IgniteModelStorageProvider.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.inference.storage.model.IgniteModelStorageProvider (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/class-use/LocalModelStorageProvider.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/class-use/LocalModelStorageProvider.html
index b0d5fe5..b2352b0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/class-use/LocalModelStorageProvider.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/class-use/LocalModelStorageProvider.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/storage/model/class-use/LocalModelStorageProvider.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.inference.storage.model.LocalModelStorageProvider (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/class-use/ModelStorage.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/class-use/ModelStorage.html
index e92aa0e..425ff57 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/class-use/ModelStorage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/class-use/ModelStorage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/storage/model/class-use/ModelStorage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.inference.storage.model.ModelStorage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/class-use/ModelStorageFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/class-use/ModelStorageFactory.html
index dbf69e8..9433206 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/class-use/ModelStorageFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/class-use/ModelStorageFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/storage/model/class-use/ModelStorageFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.inference.storage.model.ModelStorageFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/class-use/ModelStorageProvider.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/class-use/ModelStorageProvider.html
index b083c66..ba9b813 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/class-use/ModelStorageProvider.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/class-use/ModelStorageProvider.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/storage/model/class-use/ModelStorageProvider.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.inference.storage.model.ModelStorageProvider (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/package-frame.html
index eb55efb..abd1112 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/storage/model/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.inference.storage.model (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/package-summary.html
index b182aa7..0ae6e9f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/storage/model/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.inference.storage.model (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/package-tree.html
index 99a4658..680666a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/storage/model/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.inference.storage.model Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/package-use.html
index d352bcc..231efdf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/model/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/storage/model/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.inference.storage.model (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/package-frame.html
index 4b7cf89..e42c88a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/storage/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.inference.storage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/package-summary.html
index 8ffeb11..f713ce5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/storage/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.inference.storage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/package-tree.html
index bf5d14d..cbec805 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/storage/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.inference.storage Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/package-use.html
index d78147b..09c705c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/storage/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/storage/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.inference.storage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/util/DirectorySerializer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/util/DirectorySerializer.html
index 2379498..1a91c96 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/util/DirectorySerializer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/util/DirectorySerializer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/util/DirectorySerializer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DirectorySerializer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/util/class-use/DirectorySerializer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/util/class-use/DirectorySerializer.html
index 69d8d6c..5cdc3e2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/util/class-use/DirectorySerializer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/util/class-use/DirectorySerializer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/util/class-use/DirectorySerializer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.inference.util.DirectorySerializer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/util/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/util/package-frame.html
index 41b21dd..2a486fc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/util/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/util/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/util/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.inference.util (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/util/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/util/package-summary.html
index 607196e..6332cb1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/util/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/util/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/util/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.inference.util (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/util/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/util/package-tree.html
index 68d968f..ce3086d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/util/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/util/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/util/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.inference.util Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/util/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/util/package-use.html
index 4785767..2e460e9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/util/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/inference/util/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/inference/util/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.inference.util (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/KNNModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/KNNModel.html
index e1d6967..677bbce 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/KNNModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/KNNModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/KNNModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>KNNModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/KNNPartitionDataBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/KNNPartitionDataBuilder.html
index b272b73..8c5876c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/KNNPartitionDataBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/KNNPartitionDataBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/KNNPartitionDataBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>KNNPartitionDataBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/KNNTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/KNNTrainer.html
index f509de1..927f06a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/KNNTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/KNNTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/KNNTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>KNNTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/NNClassificationModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/NNClassificationModel.html
index 0d57835..c185f76 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/NNClassificationModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/NNClassificationModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/NNClassificationModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NNClassificationModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/ANNClassificationModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/ANNClassificationModel.html
index 0996743..11ed5c4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/ANNClassificationModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/ANNClassificationModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/ann/ANNClassificationModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ANNClassificationModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/ANNClassificationTrainer.CentroidStat.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/ANNClassificationTrainer.CentroidStat.html
index 442bc54..a657e93 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/ANNClassificationTrainer.CentroidStat.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/ANNClassificationTrainer.CentroidStat.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/ann/ANNClassificationTrainer.CentroidStat.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ANNClassificationTrainer.CentroidStat (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/ANNClassificationTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/ANNClassificationTrainer.html
index 33e11fc..7137f07 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/ANNClassificationTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/ANNClassificationTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/ann/ANNClassificationTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ANNClassificationTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/ANNModelFormat.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/ANNModelFormat.html
index 1ed9e2a..ab075ef 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/ANNModelFormat.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/ANNModelFormat.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/ann/ANNModelFormat.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ANNModelFormat (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/KNNModelFormat.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/KNNModelFormat.html
index 09813d6..feeceeb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/KNNModelFormat.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/KNNModelFormat.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/ann/KNNModelFormat.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>KNNModelFormat (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/ProbableLabel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/ProbableLabel.html
index 41322a1..30529b4f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/ProbableLabel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/ProbableLabel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/ann/ProbableLabel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ProbableLabel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/class-use/ANNClassificationModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/class-use/ANNClassificationModel.html
index a57489a..3d5c58c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/class-use/ANNClassificationModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/class-use/ANNClassificationModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/ann/class-use/ANNClassificationModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.knn.ann.ANNClassificationModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/class-use/ANNClassificationTrainer.CentroidStat.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/class-use/ANNClassificationTrainer.CentroidStat.html
index 9d59dea..42195ad 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/class-use/ANNClassificationTrainer.CentroidStat.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/class-use/ANNClassificationTrainer.CentroidStat.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/ann/class-use/ANNClassificationTrainer.CentroidStat.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.knn.ann.ANNClassificationTrainer.CentroidStat (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/class-use/ANNClassificationTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/class-use/ANNClassificationTrainer.html
index b726cac..504e72d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/class-use/ANNClassificationTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/class-use/ANNClassificationTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/ann/class-use/ANNClassificationTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.knn.ann.ANNClassificationTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/class-use/ANNModelFormat.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/class-use/ANNModelFormat.html
index 1ae1710..f735e7f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/class-use/ANNModelFormat.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/class-use/ANNModelFormat.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/ann/class-use/ANNModelFormat.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.knn.ann.ANNModelFormat (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/class-use/KNNModelFormat.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/class-use/KNNModelFormat.html
index 6fd24db..ac0e1d5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/class-use/KNNModelFormat.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/class-use/KNNModelFormat.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/ann/class-use/KNNModelFormat.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.knn.ann.KNNModelFormat (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/class-use/ProbableLabel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/class-use/ProbableLabel.html
index a8c81e1..2c79c33 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/class-use/ProbableLabel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/class-use/ProbableLabel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/ann/class-use/ProbableLabel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.knn.ann.ProbableLabel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/package-frame.html
index 30ddd13..22f14c4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/ann/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.knn.ann (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/package-summary.html
index 28ee86e..000f17e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/ann/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.knn.ann (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/package-tree.html
index df5fd97..9d2443e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/ann/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.knn.ann Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/package-use.html
index 96b66f2..32a8717 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/ann/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/ann/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.knn.ann (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/class-use/KNNModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/class-use/KNNModel.html
index 4de970d..b3efcb9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/class-use/KNNModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/class-use/KNNModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/class-use/KNNModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.knn.KNNModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/class-use/KNNPartitionDataBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/class-use/KNNPartitionDataBuilder.html
index a754ab3..066a570 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/class-use/KNNPartitionDataBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/class-use/KNNPartitionDataBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/class-use/KNNPartitionDataBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.knn.KNNPartitionDataBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/class-use/KNNTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/class-use/KNNTrainer.html
index 16a809e..9fb1bb4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/class-use/KNNTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/class-use/KNNTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/class-use/KNNTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.knn.KNNTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/class-use/NNClassificationModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/class-use/NNClassificationModel.html
index bebc7ae..49d1348 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/class-use/NNClassificationModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/class-use/NNClassificationModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/class-use/NNClassificationModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.knn.NNClassificationModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/classification/KNNClassificationModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/classification/KNNClassificationModel.html
index ba9536b..d56cc36 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/classification/KNNClassificationModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/classification/KNNClassificationModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/classification/KNNClassificationModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>KNNClassificationModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/classification/KNNClassificationTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/classification/KNNClassificationTrainer.html
index f376689..59533fa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/classification/KNNClassificationTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/classification/KNNClassificationTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/classification/KNNClassificationTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>KNNClassificationTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/classification/class-use/KNNClassificationModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/classification/class-use/KNNClassificationModel.html
index ac802ce..0b174a7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/classification/class-use/KNNClassificationModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/classification/class-use/KNNClassificationModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/classification/class-use/KNNClassificationModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.knn.classification.KNNClassificationModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/classification/class-use/KNNClassificationTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/classification/class-use/KNNClassificationTrainer.html
index 2ecfbea..ca77b5f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/classification/class-use/KNNClassificationTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/classification/class-use/KNNClassificationTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/classification/class-use/KNNClassificationTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.knn.classification.KNNClassificationTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/classification/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/classification/package-frame.html
index 2ae7353..711ab38 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/classification/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/classification/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/classification/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.knn.classification (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/classification/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/classification/package-summary.html
index 3f999a7..95c1345 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/classification/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/classification/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/classification/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.knn.classification (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/classification/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/classification/package-tree.html
index ff1a78c..86e8614 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/classification/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/classification/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/classification/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.knn.classification Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/classification/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/classification/package-use.html
index 065aa22..7cd95fa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/classification/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/classification/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/classification/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.knn.classification (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/package-frame.html
index 5f49008..a87a22c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.knn (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/package-summary.html
index 55f2203..3fd19f3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.knn (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/package-tree.html
index b471db7..ea360e3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.knn Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/package-use.html
index 79876d0..a1533cb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.knn (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/regression/KNNRegressionModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/regression/KNNRegressionModel.html
index a88e806..ebc8e88 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/regression/KNNRegressionModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/regression/KNNRegressionModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/regression/KNNRegressionModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>KNNRegressionModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/regression/KNNRegressionTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/regression/KNNRegressionTrainer.html
index 08f4bf7..6d5e0f2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/regression/KNNRegressionTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/regression/KNNRegressionTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/regression/KNNRegressionTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>KNNRegressionTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/regression/class-use/KNNRegressionModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/regression/class-use/KNNRegressionModel.html
index 3280e85..50bb222 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/regression/class-use/KNNRegressionModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/regression/class-use/KNNRegressionModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/regression/class-use/KNNRegressionModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.knn.regression.KNNRegressionModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/regression/class-use/KNNRegressionTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/regression/class-use/KNNRegressionTrainer.html
index 778892a..40048c9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/regression/class-use/KNNRegressionTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/regression/class-use/KNNRegressionTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/regression/class-use/KNNRegressionTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.knn.regression.KNNRegressionTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/regression/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/regression/package-frame.html
index b6990e9..9b20599 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/regression/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/regression/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/regression/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.knn.regression (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/regression/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/regression/package-summary.html
index 89afc01..ea5fe26 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/regression/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/regression/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/regression/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.knn.regression (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/regression/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/regression/package-tree.html
index b27e81e..692f29b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/regression/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/regression/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/regression/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.knn.regression Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/regression/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/regression/package-use.html
index 7de0ee8..cc8de06 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/regression/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/regression/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/regression/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.knn.regression (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/KNNUtils.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/KNNUtils.html
index 7bcc648..dc8319d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/KNNUtils.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/KNNUtils.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/utils/KNNUtils.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>KNNUtils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/PointWithDistance.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/PointWithDistance.html
index 7269be0..2e8f8cf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/PointWithDistance.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/PointWithDistance.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/utils/PointWithDistance.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PointWithDistance (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/PointWithDistanceUtil.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/PointWithDistanceUtil.html
index 59ea072..7664a65 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/PointWithDistanceUtil.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/PointWithDistanceUtil.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/utils/PointWithDistanceUtil.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PointWithDistanceUtil (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/class-use/KNNUtils.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/class-use/KNNUtils.html
index 4a2b4da..a4a7f4e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/class-use/KNNUtils.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/class-use/KNNUtils.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/utils/class-use/KNNUtils.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.knn.utils.KNNUtils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/class-use/PointWithDistance.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/class-use/PointWithDistance.html
index 122f90c..8cbfda1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/class-use/PointWithDistance.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/class-use/PointWithDistance.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/utils/class-use/PointWithDistance.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.knn.utils.PointWithDistance (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/class-use/PointWithDistanceUtil.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/class-use/PointWithDistanceUtil.html
index f675196..9781221 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/class-use/PointWithDistanceUtil.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/class-use/PointWithDistanceUtil.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/utils/class-use/PointWithDistanceUtil.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.knn.utils.PointWithDistanceUtil (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/ArraySpatialIndex.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/ArraySpatialIndex.html
index 3539fed..3846566 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/ArraySpatialIndex.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/ArraySpatialIndex.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/utils/indices/ArraySpatialIndex.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ArraySpatialIndex (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/BallTreeSpatialIndex.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/BallTreeSpatialIndex.html
index 2d5ba53..04e8fb8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/BallTreeSpatialIndex.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/BallTreeSpatialIndex.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/utils/indices/BallTreeSpatialIndex.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BallTreeSpatialIndex (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/KDTreeSpatialIndex.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/KDTreeSpatialIndex.html
index 16636c1..6fd7bab 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/KDTreeSpatialIndex.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/KDTreeSpatialIndex.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/utils/indices/KDTreeSpatialIndex.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>KDTreeSpatialIndex (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/SpatialIndex.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/SpatialIndex.html
index cad1c93..87bf29c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/SpatialIndex.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/SpatialIndex.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/utils/indices/SpatialIndex.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SpatialIndex (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/SpatialIndexType.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/SpatialIndexType.html
index 83d6131..928ff73 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/SpatialIndexType.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/SpatialIndexType.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/utils/indices/SpatialIndexType.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SpatialIndexType (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/class-use/ArraySpatialIndex.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/class-use/ArraySpatialIndex.html
index 5dd2da3..c010da7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/class-use/ArraySpatialIndex.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/class-use/ArraySpatialIndex.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/utils/indices/class-use/ArraySpatialIndex.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.knn.utils.indices.ArraySpatialIndex (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/class-use/BallTreeSpatialIndex.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/class-use/BallTreeSpatialIndex.html
index 72d088e..622ed9c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/class-use/BallTreeSpatialIndex.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/class-use/BallTreeSpatialIndex.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/utils/indices/class-use/BallTreeSpatialIndex.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.knn.utils.indices.BallTreeSpatialIndex (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/class-use/KDTreeSpatialIndex.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/class-use/KDTreeSpatialIndex.html
index d05382d..50a7bab 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/class-use/KDTreeSpatialIndex.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/class-use/KDTreeSpatialIndex.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/utils/indices/class-use/KDTreeSpatialIndex.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.knn.utils.indices.KDTreeSpatialIndex (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/class-use/SpatialIndex.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/class-use/SpatialIndex.html
index 2b29e43..e02aeaa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/class-use/SpatialIndex.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/class-use/SpatialIndex.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/utils/indices/class-use/SpatialIndex.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.knn.utils.indices.SpatialIndex (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/class-use/SpatialIndexType.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/class-use/SpatialIndexType.html
index 58ff0fb..2e9530e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/class-use/SpatialIndexType.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/class-use/SpatialIndexType.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/utils/indices/class-use/SpatialIndexType.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.knn.utils.indices.SpatialIndexType (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/package-frame.html
index 11890a9..6e8c681 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/utils/indices/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.knn.utils.indices (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/package-summary.html
index 5eb5612..5cc031b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/utils/indices/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.knn.utils.indices (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/package-tree.html
index b5c974d..aa5d88b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/utils/indices/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.knn.utils.indices Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/package-use.html
index 91fab53..f9dd913 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/indices/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/utils/indices/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.knn.utils.indices (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/package-frame.html
index 09da87b..ca51c35 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/utils/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.knn.utils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/package-summary.html
index bc7c80d..b288249 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/utils/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.knn.utils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/package-tree.html
index 1ce92b2..2417eb4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/utils/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.knn.utils Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/package-use.html
index 5149cef..e0fb720 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/knn/utils/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/knn/utils/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.knn.utils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/Blas.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/Blas.html
index 513b8b5..62fe5d3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/Blas.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/Blas.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/Blas.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Blas (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/Destroyable.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/Destroyable.html
index 41d7d6e..ad7b107 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/Destroyable.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/Destroyable.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/Destroyable.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Destroyable (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/MetaAttributes.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/MetaAttributes.html
index 6fd0022..40d258f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/MetaAttributes.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/MetaAttributes.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/MetaAttributes.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MetaAttributes (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/StorageConstants.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/StorageConstants.html
index c38f552..00a6ffd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/StorageConstants.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/StorageConstants.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/StorageConstants.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>StorageConstants (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/StorageOpsMetrics.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/StorageOpsMetrics.html
index 10bbf4e..ce2d0c9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/StorageOpsMetrics.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/StorageOpsMetrics.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/StorageOpsMetrics.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>StorageOpsMetrics (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/Tracer.ColorMapper.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/Tracer.ColorMapper.html
index 05a4a86..3e478b4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/Tracer.ColorMapper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/Tracer.ColorMapper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/Tracer.ColorMapper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Tracer.ColorMapper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/Tracer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/Tracer.html
index 3a10d2d..e46c0a2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/Tracer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/Tracer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/Tracer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Tracer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/class-use/Blas.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/class-use/Blas.html
index 8487e4a..4075496 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/class-use/Blas.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/class-use/Blas.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/class-use/Blas.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.Blas (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/class-use/Destroyable.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/class-use/Destroyable.html
index d88a588..5511fde 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/class-use/Destroyable.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/class-use/Destroyable.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/class-use/Destroyable.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.math.Destroyable (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/class-use/MetaAttributes.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/class-use/MetaAttributes.html
index 67bbfa6..e15f723 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/class-use/MetaAttributes.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/class-use/MetaAttributes.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/class-use/MetaAttributes.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.math.MetaAttributes (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/class-use/StorageConstants.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/class-use/StorageConstants.html
index a361491..4ada069 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/class-use/StorageConstants.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/class-use/StorageConstants.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/class-use/StorageConstants.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.math.StorageConstants (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/class-use/StorageOpsMetrics.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/class-use/StorageOpsMetrics.html
index 269f9e8..4e4300d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/class-use/StorageOpsMetrics.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/class-use/StorageOpsMetrics.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/class-use/StorageOpsMetrics.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.math.StorageOpsMetrics (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/class-use/Tracer.ColorMapper.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/class-use/Tracer.ColorMapper.html
index 5cf1aeb..005d7ac 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/class-use/Tracer.ColorMapper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/class-use/Tracer.ColorMapper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/class-use/Tracer.ColorMapper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.math.Tracer.ColorMapper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/class-use/Tracer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/class-use/Tracer.html
index 1d7ec16..0abd8d9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/class-use/Tracer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/class-use/Tracer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/class-use/Tracer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.Tracer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/ChebyshevDistance.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/ChebyshevDistance.html
index 9a660cc..f6b65de 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/ChebyshevDistance.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/ChebyshevDistance.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/distances/ChebyshevDistance.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ChebyshevDistance (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/CosineSimilarity.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/CosineSimilarity.html
index 79076d7..48aa63e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/CosineSimilarity.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/CosineSimilarity.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/distances/CosineSimilarity.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CosineSimilarity (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/DistanceMeasure.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/DistanceMeasure.html
index ede2e97..5072200 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/DistanceMeasure.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/DistanceMeasure.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/distances/DistanceMeasure.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DistanceMeasure (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/EuclideanDistance.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/EuclideanDistance.html
index 98f4a19..c481fcc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/EuclideanDistance.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/EuclideanDistance.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/distances/EuclideanDistance.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>EuclideanDistance (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/HammingDistance.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/HammingDistance.html
index 10373dd..9e2a8cb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/HammingDistance.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/HammingDistance.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/distances/HammingDistance.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>HammingDistance (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/JaccardIndex.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/JaccardIndex.html
index efeb03a..701dc20 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/JaccardIndex.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/JaccardIndex.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/distances/JaccardIndex.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>JaccardIndex (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/ManhattanDistance.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/ManhattanDistance.html
index 7bfae98..30cb9eb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/ManhattanDistance.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/ManhattanDistance.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/distances/ManhattanDistance.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ManhattanDistance (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/MinkowskiDistance.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/MinkowskiDistance.html
index 4dfb1d3..44ec6e5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/MinkowskiDistance.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/MinkowskiDistance.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/distances/MinkowskiDistance.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MinkowskiDistance (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/class-use/ChebyshevDistance.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/class-use/ChebyshevDistance.html
index 96e842a..091b0f8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/class-use/ChebyshevDistance.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/class-use/ChebyshevDistance.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/distances/class-use/ChebyshevDistance.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.distances.ChebyshevDistance (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/class-use/CosineSimilarity.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/class-use/CosineSimilarity.html
index 74e9d64..8d414a8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/class-use/CosineSimilarity.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/class-use/CosineSimilarity.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/distances/class-use/CosineSimilarity.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.distances.CosineSimilarity (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/class-use/DistanceMeasure.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/class-use/DistanceMeasure.html
index 87daa53..d99a390 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/class-use/DistanceMeasure.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/class-use/DistanceMeasure.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/distances/class-use/DistanceMeasure.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.math.distances.DistanceMeasure (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/class-use/EuclideanDistance.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/class-use/EuclideanDistance.html
index 0f67b09..9531c24 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/class-use/EuclideanDistance.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/class-use/EuclideanDistance.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/distances/class-use/EuclideanDistance.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.distances.EuclideanDistance (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/class-use/HammingDistance.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/class-use/HammingDistance.html
index 45a498c..c78f252 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/class-use/HammingDistance.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/class-use/HammingDistance.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/distances/class-use/HammingDistance.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.distances.HammingDistance (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/class-use/JaccardIndex.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/class-use/JaccardIndex.html
index ccabfdb..ea3aa2a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/class-use/JaccardIndex.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/class-use/JaccardIndex.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/distances/class-use/JaccardIndex.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.distances.JaccardIndex (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/class-use/ManhattanDistance.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/class-use/ManhattanDistance.html
index c802f70..1b2918f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/class-use/ManhattanDistance.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/class-use/ManhattanDistance.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/distances/class-use/ManhattanDistance.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.distances.ManhattanDistance (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/class-use/MinkowskiDistance.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/class-use/MinkowskiDistance.html
index bc9afd6..6ea5a6a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/class-use/MinkowskiDistance.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/class-use/MinkowskiDistance.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/distances/class-use/MinkowskiDistance.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.distances.MinkowskiDistance (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/package-frame.html
index 62735bd..548b5f8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/distances/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.distances (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/package-summary.html
index 7f9b301..a56a501 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/distances/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.distances (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/package-tree.html
index f00e2a4..38c115b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/distances/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.distances Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/package-use.html
index 507c3d1..109f0b7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/distances/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/distances/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.math.distances (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/UnsupportedOperationException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/UnsupportedOperationException.html
index 5ea7ce5..037a314 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/UnsupportedOperationException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/UnsupportedOperationException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/UnsupportedOperationException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>UnsupportedOperationException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/class-use/UnsupportedOperationException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/class-use/UnsupportedOperationException.html
index 2500061..2b81dea 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/class-use/UnsupportedOperationException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/class-use/UnsupportedOperationException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/class-use/UnsupportedOperationException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.exceptions.UnsupportedOperationException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/EmptyFileException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/EmptyFileException.html
index 8ee540c..e714a6b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/EmptyFileException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/EmptyFileException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/EmptyFileException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>EmptyFileException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/FileParsingException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/FileParsingException.html
index 979aa9b..215868c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/FileParsingException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/FileParsingException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/FileParsingException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>FileParsingException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/NoLabelVectorException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/NoLabelVectorException.html
index 72d6040..98f65dc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/NoLabelVectorException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/NoLabelVectorException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/NoLabelVectorException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NoLabelVectorException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/class-use/EmptyFileException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/class-use/EmptyFileException.html
index abbb4cd..0a3b062 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/class-use/EmptyFileException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/class-use/EmptyFileException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/class-use/EmptyFileException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.exceptions.datastructures.EmptyFileException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/class-use/FileParsingException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/class-use/FileParsingException.html
index 103b5d3..d1e8bb6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/class-use/FileParsingException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/class-use/FileParsingException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/class-use/FileParsingException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.exceptions.datastructures.FileParsingException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/class-use/NoLabelVectorException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/class-use/NoLabelVectorException.html
index f95c991..69872da 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/class-use/NoLabelVectorException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/class-use/NoLabelVectorException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/class-use/NoLabelVectorException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.exceptions.datastructures.NoLabelVectorException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/package-frame.html
index 83f16a1..37c610b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.exceptions.datastructures (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/package-summary.html
index eb11d69..f660cd2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.exceptions.datastructures (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/package-tree.html
index fa4fab0..6044505 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.exceptions.datastructures Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/package-use.html
index 4f59c3a..e3db89a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/datastructures/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.math.exceptions.datastructures (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/CardinalityException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/CardinalityException.html
index 657de30..8538008 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/CardinalityException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/CardinalityException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/math/CardinalityException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CardinalityException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/ColumnIndexException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/ColumnIndexException.html
index ff5d094..295e497 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/ColumnIndexException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/ColumnIndexException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/math/ColumnIndexException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ColumnIndexException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/IndexException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/IndexException.html
index dc896f4..c69218e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/IndexException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/IndexException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/math/IndexException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IndexException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/MathIllegalArgumentException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/MathIllegalArgumentException.html
index 1f71081..c6c108d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/MathIllegalArgumentException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/MathIllegalArgumentException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/math/MathIllegalArgumentException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MathIllegalArgumentException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/MathRuntimeException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/MathRuntimeException.html
index c93e2d6..81ac984 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/MathRuntimeException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/MathRuntimeException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/math/MathRuntimeException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MathRuntimeException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/NoDataException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/NoDataException.html
index ac202fd..eadf1cc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/NoDataException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/NoDataException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/math/NoDataException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NoDataException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/NonSquareMatrixException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/NonSquareMatrixException.html
index 7ead3eb..4833806 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/NonSquareMatrixException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/NonSquareMatrixException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/math/NonSquareMatrixException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NonSquareMatrixException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/RowIndexException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/RowIndexException.html
index 3df7266..8645a50 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/RowIndexException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/RowIndexException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/math/RowIndexException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>RowIndexException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/SingularMatrixException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/SingularMatrixException.html
index 03afcef..0752ee6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/SingularMatrixException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/SingularMatrixException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/math/SingularMatrixException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SingularMatrixException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/CardinalityException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/CardinalityException.html
index e74cb38..8462b49 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/CardinalityException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/CardinalityException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/CardinalityException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.exceptions.math.CardinalityException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/ColumnIndexException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/ColumnIndexException.html
index b05c40c..2f7216e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/ColumnIndexException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/ColumnIndexException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/ColumnIndexException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.exceptions.math.ColumnIndexException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/IndexException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/IndexException.html
index 25f053c..ae691b2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/IndexException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/IndexException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/IndexException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.exceptions.math.IndexException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/MathIllegalArgumentException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/MathIllegalArgumentException.html
index 53bdc0b..770725d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/MathIllegalArgumentException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/MathIllegalArgumentException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/MathIllegalArgumentException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.exceptions.math.MathIllegalArgumentException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/MathRuntimeException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/MathRuntimeException.html
index 8cd437d..5d807aa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/MathRuntimeException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/MathRuntimeException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/MathRuntimeException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.exceptions.math.MathRuntimeException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/NoDataException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/NoDataException.html
index f2f88ec..090bb9c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/NoDataException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/NoDataException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/NoDataException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.exceptions.math.NoDataException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/NonSquareMatrixException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/NonSquareMatrixException.html
index e6e29fc..dea76dd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/NonSquareMatrixException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/NonSquareMatrixException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/NonSquareMatrixException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.exceptions.math.NonSquareMatrixException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/RowIndexException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/RowIndexException.html
index cb40498..130d016 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/RowIndexException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/RowIndexException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/RowIndexException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.exceptions.math.RowIndexException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/SingularMatrixException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/SingularMatrixException.html
index 57b1664..e383d8d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/SingularMatrixException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/SingularMatrixException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/math/class-use/SingularMatrixException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.exceptions.math.SingularMatrixException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/package-frame.html
index f1c6def..d0c48dc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/math/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.exceptions.math (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/package-summary.html
index 775e38b..f28127a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/math/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.exceptions.math (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/package-tree.html
index 18a2ca2..f7d276a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/math/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.exceptions.math Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/package-use.html
index bdfaffc..8cbf296 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/math/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/math/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.math.exceptions.math (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/package-frame.html
index 5510c1e..e724640 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.exceptions (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/package-summary.html
index 4bb4dfc..8841347 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.exceptions (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/package-tree.html
index b5f5322..9152ab7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.exceptions Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/package-use.html
index 7466c15..f172546 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.math.exceptions (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/IllegalFeatureTypeException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/IllegalFeatureTypeException.html
index fdb9e80..ada70f6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/IllegalFeatureTypeException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/IllegalFeatureTypeException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/IllegalFeatureTypeException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IllegalFeatureTypeException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/IllegalLabelTypeException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/IllegalLabelTypeException.html
index d3c19fa..5ef897f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/IllegalLabelTypeException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/IllegalLabelTypeException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/IllegalLabelTypeException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IllegalLabelTypeException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/NonDoubleVectorException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/NonDoubleVectorException.html
index 16903d1..64b79fb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/NonDoubleVectorException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/NonDoubleVectorException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/NonDoubleVectorException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NonDoubleVectorException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/UndefinedLabelException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/UndefinedLabelException.html
index e7d75ff..f9985d5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/UndefinedLabelException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/UndefinedLabelException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/UndefinedLabelException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>UndefinedLabelException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/UnknownCategorialValueException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/UnknownCategorialValueException.html
index 62ae773..cf0798c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/UnknownCategorialValueException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/UnknownCategorialValueException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/UnknownCategorialValueException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>UnknownCategorialValueException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/class-use/IllegalFeatureTypeException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/class-use/IllegalFeatureTypeException.html
index 6d6ddaa..1377318 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/class-use/IllegalFeatureTypeException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/class-use/IllegalFeatureTypeException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/class-use/IllegalFeatureTypeException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.exceptions.preprocessing.IllegalFeatureTypeException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/class-use/IllegalLabelTypeException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/class-use/IllegalLabelTypeException.html
index 90875c4..9ef63ee 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/class-use/IllegalLabelTypeException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/class-use/IllegalLabelTypeException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/class-use/IllegalLabelTypeException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.exceptions.preprocessing.IllegalLabelTypeException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/class-use/NonDoubleVectorException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/class-use/NonDoubleVectorException.html
index 9927694..29ed1a2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/class-use/NonDoubleVectorException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/class-use/NonDoubleVectorException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/class-use/NonDoubleVectorException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.exceptions.preprocessing.NonDoubleVectorException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/class-use/UndefinedLabelException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/class-use/UndefinedLabelException.html
index e585119..a2e11ce 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/class-use/UndefinedLabelException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/class-use/UndefinedLabelException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/class-use/UndefinedLabelException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.exceptions.preprocessing.UndefinedLabelException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/class-use/UnknownCategorialValueException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/class-use/UnknownCategorialValueException.html
index cf6f3d0..b61c6eb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/class-use/UnknownCategorialValueException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/class-use/UnknownCategorialValueException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/class-use/UnknownCategorialValueException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.exceptions.preprocessing.UnknownCategorialValueException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/package-frame.html
index 6568ef1..d0c01f1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.exceptions.preprocessing (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/package-summary.html
index 5c11534..673baa4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.exceptions.preprocessing (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/package-tree.html
index b9cd46e..b7595ac 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.exceptions.preprocessing Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/package-use.html
index 59576c3..20cc979 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/exceptions/preprocessing/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.math.exceptions.preprocessing (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/Functions.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/Functions.html
index ff939f6..25a6c58 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/Functions.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/Functions.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/Functions.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Functions (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteBiConsumer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteBiConsumer.html
index 8ea0b7b..6a8d03c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteBiConsumer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteBiConsumer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/IgniteBiConsumer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteBiConsumer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteBiFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteBiFunction.html
index 49a2b65..6b6b93c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteBiFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteBiFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/IgniteBiFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteBiFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteBinaryOperator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteBinaryOperator.html
index 12cf7ec..7963196 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteBinaryOperator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteBinaryOperator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/IgniteBinaryOperator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteBinaryOperator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteConsumer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteConsumer.html
index bd5f74f..2b8f8a5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteConsumer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteConsumer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/IgniteConsumer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteConsumer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteCurriedBiFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteCurriedBiFunction.html
index a4ab946..6ee2759 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteCurriedBiFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteCurriedBiFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/IgniteCurriedBiFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteCurriedBiFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteCurriedTriFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteCurriedTriFunction.html
index 265e16f..5b59d3f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteCurriedTriFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteCurriedTriFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/IgniteCurriedTriFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteCurriedTriFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteDifferentiableDoubleToDoubleFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteDifferentiableDoubleToDoubleFunction.html
index f6a85e8..0178b6a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteDifferentiableDoubleToDoubleFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteDifferentiableDoubleToDoubleFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/IgniteDifferentiableDoubleToDoubleFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteDifferentiableDoubleToDoubleFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteDifferentiableVectorToDoubleFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteDifferentiableVectorToDoubleFunction.html
index d4733aa..bea47f2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteDifferentiableVectorToDoubleFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteDifferentiableVectorToDoubleFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/IgniteDifferentiableVectorToDoubleFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteDifferentiableVectorToDoubleFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteDoubleConsumer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteDoubleConsumer.html
index ba11777..9d82d72 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteDoubleConsumer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteDoubleConsumer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/IgniteDoubleConsumer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteDoubleConsumer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteDoubleFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteDoubleFunction.html
index 5fdcd4a..47e31a6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteDoubleFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteDoubleFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/IgniteDoubleFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteDoubleFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteFunction.html
index ab7dc83..d24d79e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/IgniteFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteIntDoubleToDoubleBiFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteIntDoubleToDoubleBiFunction.html
index 2c11ea6..3a8fb9c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteIntDoubleToDoubleBiFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteIntDoubleToDoubleBiFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/IgniteIntDoubleToDoubleBiFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteIntDoubleToDoubleBiFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteIntIntToIntBiFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteIntIntToIntBiFunction.html
index a5c7f13..47c461a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteIntIntToIntBiFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteIntIntToIntBiFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/IgniteIntIntToIntBiFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteIntIntToIntBiFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteSupplier.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteSupplier.html
index 0381db2..6ae9707 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteSupplier.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteSupplier.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/IgniteSupplier.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteSupplier (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteToDoubleFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteToDoubleFunction.html
index 7dfa7e1..5da2a8b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteToDoubleFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteToDoubleFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/IgniteToDoubleFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteToDoubleFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteTriConsumer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteTriConsumer.html
index 3036288..dd51223 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteTriConsumer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteTriConsumer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/IgniteTriConsumer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteTriConsumer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteTriFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteTriFunction.html
index dfa23e7..cc8f972 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteTriFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IgniteTriFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/IgniteTriFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteTriFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IntDoubleToVoidFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IntDoubleToVoidFunction.html
index cd27c92..227265a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IntDoubleToVoidFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IntDoubleToVoidFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/IntDoubleToVoidFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IntDoubleToVoidFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IntIntDoubleToVoidFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IntIntDoubleToVoidFunction.html
index 5733df5..a186bbf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IntIntDoubleToVoidFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IntIntDoubleToVoidFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/IntIntDoubleToVoidFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IntIntDoubleToVoidFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IntIntToDoubleFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IntIntToDoubleFunction.html
index ae4a3e0..fd14d86 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IntIntToDoubleFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/IntIntToDoubleFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/IntIntToDoubleFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IntIntToDoubleFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/Functions.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/Functions.html
index 042e62a..7c3e6ba 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/Functions.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/Functions.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/class-use/Functions.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.functions.Functions (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteBiConsumer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteBiConsumer.html
index 0f2c5f5..b36fca3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteBiConsumer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteBiConsumer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteBiConsumer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.math.functions.IgniteBiConsumer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteBiFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteBiFunction.html
index 7f9c221..0f92021 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteBiFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteBiFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteBiFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.math.functions.IgniteBiFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteBinaryOperator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteBinaryOperator.html
index 16e6395..90d018b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteBinaryOperator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteBinaryOperator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteBinaryOperator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.math.functions.IgniteBinaryOperator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteConsumer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteConsumer.html
index 5580b5d..7caa2e0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteConsumer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteConsumer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteConsumer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.math.functions.IgniteConsumer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteCurriedBiFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteCurriedBiFunction.html
index 1c512c7..8e0e557 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteCurriedBiFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteCurriedBiFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteCurriedBiFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.math.functions.IgniteCurriedBiFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteCurriedTriFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteCurriedTriFunction.html
index 8c38a9e..c875b30 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteCurriedTriFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteCurriedTriFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteCurriedTriFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.math.functions.IgniteCurriedTriFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteDifferentiableDoubleToDoubleFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteDifferentiableDoubleToDoubleFunction.html
index 3e59e08..2783eb9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteDifferentiableDoubleToDoubleFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteDifferentiableDoubleToDoubleFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteDifferentiableDoubleToDoubleFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.math.functions.IgniteDifferentiableDoubleToDoubleFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteDifferentiableVectorToDoubleFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteDifferentiableVectorToDoubleFunction.html
index 4cb1594..6ffe29d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteDifferentiableVectorToDoubleFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteDifferentiableVectorToDoubleFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteDifferentiableVectorToDoubleFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.math.functions.IgniteDifferentiableVectorToDoubleFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteDoubleConsumer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteDoubleConsumer.html
index 2834bb6..e01a575 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteDoubleConsumer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteDoubleConsumer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteDoubleConsumer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.math.functions.IgniteDoubleConsumer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteDoubleFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteDoubleFunction.html
index 686e042..341d753 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteDoubleFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteDoubleFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteDoubleFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.math.functions.IgniteDoubleFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteFunction.html
index 63ea867..56632d5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.math.functions.IgniteFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteIntDoubleToDoubleBiFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteIntDoubleToDoubleBiFunction.html
index 9572e44..897b8b0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteIntDoubleToDoubleBiFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteIntDoubleToDoubleBiFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteIntDoubleToDoubleBiFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.math.functions.IgniteIntDoubleToDoubleBiFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteIntIntToIntBiFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteIntIntToIntBiFunction.html
index b2d9e4e..a683220 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteIntIntToIntBiFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteIntIntToIntBiFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteIntIntToIntBiFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.math.functions.IgniteIntIntToIntBiFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteSupplier.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteSupplier.html
index a09b874..4481d18 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteSupplier.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteSupplier.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteSupplier.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.math.functions.IgniteSupplier (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteToDoubleFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteToDoubleFunction.html
index 2fc7b71..df4a73d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteToDoubleFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteToDoubleFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteToDoubleFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.math.functions.IgniteToDoubleFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteTriConsumer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteTriConsumer.html
index e3f367b..08fc090 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteTriConsumer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteTriConsumer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteTriConsumer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.math.functions.IgniteTriConsumer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteTriFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteTriFunction.html
index 39a3bc3..26327ff 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteTriFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteTriFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/class-use/IgniteTriFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.math.functions.IgniteTriFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IntDoubleToVoidFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IntDoubleToVoidFunction.html
index f940630..10291d0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IntDoubleToVoidFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IntDoubleToVoidFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/class-use/IntDoubleToVoidFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.math.functions.IntDoubleToVoidFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IntIntDoubleToVoidFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IntIntDoubleToVoidFunction.html
index 4244ba2..e4416e5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IntIntDoubleToVoidFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IntIntDoubleToVoidFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/class-use/IntIntDoubleToVoidFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.math.functions.IntIntDoubleToVoidFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IntIntToDoubleFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IntIntToDoubleFunction.html
index ca785aa..cb30d12 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IntIntToDoubleFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/class-use/IntIntToDoubleFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/class-use/IntIntToDoubleFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.math.functions.IntIntToDoubleFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/package-frame.html
index c9e185b..2b9e8b7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.functions (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/package-summary.html
index 9b7fd66..eac3f64 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.functions (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/package-tree.html
index 36a29ca..5846538 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.functions Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/package-use.html
index d0ee01c..eae5e35 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/functions/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/functions/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.math.functions (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/IterativeSolverResult.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/IterativeSolverResult.html
index 08d0810..4d2d7a1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/IterativeSolverResult.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/IterativeSolverResult.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/isolve/IterativeSolverResult.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IterativeSolverResult (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/class-use/IterativeSolverResult.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/class-use/IterativeSolverResult.html
index c27d914..00e5498 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/class-use/IterativeSolverResult.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/class-use/IterativeSolverResult.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/isolve/class-use/IterativeSolverResult.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.isolve.IterativeSolverResult (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/AbstractLSQR.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/AbstractLSQR.html
index 5365c3f..b1fc99f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/AbstractLSQR.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/AbstractLSQR.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/isolve/lsqr/AbstractLSQR.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>AbstractLSQR (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/LSQROnHeap.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/LSQROnHeap.html
index 8c4d642..37540fb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/LSQROnHeap.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/LSQROnHeap.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/isolve/lsqr/LSQROnHeap.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LSQROnHeap (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/LSQRPartitionContext.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/LSQRPartitionContext.html
index 3d61142..747c128 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/LSQRPartitionContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/LSQRPartitionContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/isolve/lsqr/LSQRPartitionContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LSQRPartitionContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/LSQRResult.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/LSQRResult.html
index f596653..8626dac 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/LSQRResult.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/LSQRResult.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/isolve/lsqr/LSQRResult.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LSQRResult (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/class-use/AbstractLSQR.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/class-use/AbstractLSQR.html
index 3275488..fe6b4a3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/class-use/AbstractLSQR.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/class-use/AbstractLSQR.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/isolve/lsqr/class-use/AbstractLSQR.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.isolve.lsqr.AbstractLSQR (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/class-use/LSQROnHeap.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/class-use/LSQROnHeap.html
index f63aaf0..ad9b541 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/class-use/LSQROnHeap.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/class-use/LSQROnHeap.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/isolve/lsqr/class-use/LSQROnHeap.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.isolve.lsqr.LSQROnHeap (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/class-use/LSQRPartitionContext.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/class-use/LSQRPartitionContext.html
index 47a80cb..74d1b06 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/class-use/LSQRPartitionContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/class-use/LSQRPartitionContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/isolve/lsqr/class-use/LSQRPartitionContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.isolve.lsqr.LSQRPartitionContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/class-use/LSQRResult.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/class-use/LSQRResult.html
index 2110baa..575c292 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/class-use/LSQRResult.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/class-use/LSQRResult.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/isolve/lsqr/class-use/LSQRResult.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.isolve.lsqr.LSQRResult (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/package-frame.html
index 69c31d0..a28fc29 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/isolve/lsqr/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.isolve.lsqr (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/package-summary.html
index d3b7844..00a0a9a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/isolve/lsqr/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.isolve.lsqr (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/package-tree.html
index f4fd649..227c5ad 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/isolve/lsqr/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.isolve.lsqr Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/package-use.html
index 118601a..f173052 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/lsqr/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/isolve/lsqr/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.math.isolve.lsqr (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/package-frame.html
index 43c9209..768dd40 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/isolve/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.isolve (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/package-summary.html
index 5f0363b..d4c5fc6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/isolve/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.isolve (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/package-tree.html
index 68585f9..c4e9041 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/isolve/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.isolve Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/package-use.html
index cdbdbe1..60b5e07 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/isolve/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/isolve/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.math.isolve (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/package-frame.html
index cf60a51..83104cb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/package-summary.html
index 1d9d50b..47acd0c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/package-tree.html
index 64b69cc..2a8cc53 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/package-use.html
index b823749..716bd35 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.math (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/AbstractMatrix.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/AbstractMatrix.html
index 28116e5..1d514dc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/AbstractMatrix.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/AbstractMatrix.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/AbstractMatrix.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>AbstractMatrix (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/LUDecomposition.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/LUDecomposition.html
index e168b46..8e712f4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/LUDecomposition.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/LUDecomposition.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/LUDecomposition.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LUDecomposition (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/Matrix.Element.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/Matrix.Element.html
index f96c221..7de23d3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/Matrix.Element.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/Matrix.Element.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/Matrix.Element.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Matrix.Element (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/Matrix.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/Matrix.html
index d624a03..15a1434 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/Matrix.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/Matrix.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/Matrix.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Matrix (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/MatrixStorage.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/MatrixStorage.html
index f7eeea7..50a1885 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/MatrixStorage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/MatrixStorage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/MatrixStorage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MatrixStorage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/OrderedMatrix.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/OrderedMatrix.html
index a2b6918..d8e1792 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/OrderedMatrix.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/OrderedMatrix.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/OrderedMatrix.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>OrderedMatrix (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/class-use/AbstractMatrix.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/class-use/AbstractMatrix.html
index 737c8b2..82b6911 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/class-use/AbstractMatrix.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/class-use/AbstractMatrix.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/class-use/AbstractMatrix.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.primitives.matrix.AbstractMatrix (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/class-use/LUDecomposition.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/class-use/LUDecomposition.html
index 1525853..d4017dd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/class-use/LUDecomposition.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/class-use/LUDecomposition.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/class-use/LUDecomposition.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.primitives.matrix.LUDecomposition (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/class-use/Matrix.Element.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/class-use/Matrix.Element.html
index bac5ef9..d0beb93 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/class-use/Matrix.Element.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/class-use/Matrix.Element.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/class-use/Matrix.Element.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.math.primitives.matrix.Matrix.Element (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/class-use/Matrix.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/class-use/Matrix.html
index 4888564..5abff05 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/class-use/Matrix.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/class-use/Matrix.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/class-use/Matrix.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.math.primitives.matrix.Matrix (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/class-use/MatrixStorage.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/class-use/MatrixStorage.html
index 3db1679..6f088d0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/class-use/MatrixStorage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/class-use/MatrixStorage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/class-use/MatrixStorage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.math.primitives.matrix.MatrixStorage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/class-use/OrderedMatrix.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/class-use/OrderedMatrix.html
index adada98..f1091bb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/class-use/OrderedMatrix.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/class-use/OrderedMatrix.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/class-use/OrderedMatrix.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.math.primitives.matrix.OrderedMatrix (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/DenseMatrix.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/DenseMatrix.html
index c9b7528..05c2cd1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/DenseMatrix.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/DenseMatrix.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/DenseMatrix.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DenseMatrix (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/SparseMatrix.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/SparseMatrix.html
index 1bd3d78..8eeab0f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/SparseMatrix.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/SparseMatrix.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/SparseMatrix.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SparseMatrix (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/ViewMatrix.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/ViewMatrix.html
index 0ba8ba6..8fde7d2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/ViewMatrix.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/ViewMatrix.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/ViewMatrix.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ViewMatrix (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/class-use/DenseMatrix.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/class-use/DenseMatrix.html
index 6531174..30e06af 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/class-use/DenseMatrix.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/class-use/DenseMatrix.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/class-use/DenseMatrix.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.primitives.matrix.impl.DenseMatrix (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/class-use/SparseMatrix.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/class-use/SparseMatrix.html
index 6dac7cc..5b9186a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/class-use/SparseMatrix.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/class-use/SparseMatrix.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/class-use/SparseMatrix.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.primitives.matrix.impl.SparseMatrix (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/class-use/ViewMatrix.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/class-use/ViewMatrix.html
index 8007915..9a3179b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/class-use/ViewMatrix.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/class-use/ViewMatrix.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/class-use/ViewMatrix.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.primitives.matrix.impl.ViewMatrix (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/package-frame.html
index 33baff6..d71b6d8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.primitives.matrix.impl (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/package-summary.html
index 14c9472..fcd4ac6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.primitives.matrix.impl (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/package-tree.html
index 6da8ceb..5b424e8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.primitives.matrix.impl Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/package-use.html
index c8f4855..90f8fd8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/impl/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.math.primitives.matrix.impl (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/package-frame.html
index 64660a2..c9f853a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.primitives.matrix (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/package-summary.html
index 6e5c4eb..52d6916 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.primitives.matrix (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/package-tree.html
index 2af46c7..4781ada 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.primitives.matrix Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/package-use.html
index d4fa167..a5ca9cc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.math.primitives.matrix (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/DenseMatrixStorage.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/DenseMatrixStorage.html
index f00d118..0f5a82b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/DenseMatrixStorage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/DenseMatrixStorage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/DenseMatrixStorage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DenseMatrixStorage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/SparseMatrixStorage.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/SparseMatrixStorage.html
index c3fb379..e1222d2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/SparseMatrixStorage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/SparseMatrixStorage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/SparseMatrixStorage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SparseMatrixStorage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/ViewMatrixStorage.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/ViewMatrixStorage.html
index e927247..99f9efe 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/ViewMatrixStorage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/ViewMatrixStorage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/ViewMatrixStorage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ViewMatrixStorage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/class-use/DenseMatrixStorage.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/class-use/DenseMatrixStorage.html
index bb93164..a76a178 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/class-use/DenseMatrixStorage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/class-use/DenseMatrixStorage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/class-use/DenseMatrixStorage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.primitives.matrix.storage.DenseMatrixStorage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/class-use/SparseMatrixStorage.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/class-use/SparseMatrixStorage.html
index bc33bc1..72aab19 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/class-use/SparseMatrixStorage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/class-use/SparseMatrixStorage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/class-use/SparseMatrixStorage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.primitives.matrix.storage.SparseMatrixStorage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/class-use/ViewMatrixStorage.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/class-use/ViewMatrixStorage.html
index cde43f2..b776b4f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/class-use/ViewMatrixStorage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/class-use/ViewMatrixStorage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/class-use/ViewMatrixStorage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.primitives.matrix.storage.ViewMatrixStorage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/package-frame.html
index d5603cd..bef22c5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.primitives.matrix.storage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/package-summary.html
index dc7aea9..81262e9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.primitives.matrix.storage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/package-tree.html
index e963e1e..ed7fc9a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.primitives.matrix.storage Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/package-use.html
index ccf0034..277eaff 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/matrix/storage/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.math.primitives.matrix.storage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/package-frame.html
index ca218ff..7812371 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.primitives (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/package-summary.html
index 94d7fe6..397297c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.primitives (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/package-tree.html
index eead60d..df58a1e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.primitives Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/package-use.html
index 9255ca2..05c5db7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.math.primitives (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/AbstractVector.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/AbstractVector.html
index cf0585a..ce6039e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/AbstractVector.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/AbstractVector.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/AbstractVector.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>AbstractVector (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/NamedVector.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/NamedVector.html
index ec6eea1..d68f0e1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/NamedVector.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/NamedVector.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/NamedVector.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NamedVector (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/Vector.Element.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/Vector.Element.html
index 0d391b8..26d6a32 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/Vector.Element.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/Vector.Element.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/Vector.Element.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Vector.Element (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/Vector.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/Vector.html
index 3398d6c..e3b2e48 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/Vector.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/Vector.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/Vector.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Vector (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/VectorStorage.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/VectorStorage.html
index 250c97b..76e99aa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/VectorStorage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/VectorStorage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/VectorStorage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>VectorStorage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/VectorUtils.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/VectorUtils.html
index f098272..604334b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/VectorUtils.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/VectorUtils.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/VectorUtils.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>VectorUtils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/class-use/AbstractVector.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/class-use/AbstractVector.html
index 0715457..a1c93da 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/class-use/AbstractVector.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/class-use/AbstractVector.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/class-use/AbstractVector.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.primitives.vector.AbstractVector (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/class-use/NamedVector.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/class-use/NamedVector.html
index 6bcad01..1d659c0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/class-use/NamedVector.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/class-use/NamedVector.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/class-use/NamedVector.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.math.primitives.vector.NamedVector (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/class-use/Vector.Element.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/class-use/Vector.Element.html
index 4781065..1d89aa9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/class-use/Vector.Element.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/class-use/Vector.Element.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/class-use/Vector.Element.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.math.primitives.vector.Vector.Element (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/class-use/Vector.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/class-use/Vector.html
index 5308598..190fe9b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/class-use/Vector.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/class-use/Vector.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/class-use/Vector.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.math.primitives.vector.Vector (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/class-use/VectorStorage.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/class-use/VectorStorage.html
index 02fb360..4e6a581 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/class-use/VectorStorage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/class-use/VectorStorage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/class-use/VectorStorage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.math.primitives.vector.VectorStorage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/class-use/VectorUtils.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/class-use/VectorUtils.html
index 604445b..690e4cf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/class-use/VectorUtils.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/class-use/VectorUtils.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/class-use/VectorUtils.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.primitives.vector.VectorUtils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/DelegatingNamedVector.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/DelegatingNamedVector.html
index e34d74c..dd481ee 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/DelegatingNamedVector.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/DelegatingNamedVector.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/DelegatingNamedVector.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DelegatingNamedVector (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/DelegatingVector.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/DelegatingVector.html
index e479cec..2a1b4ce 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/DelegatingVector.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/DelegatingVector.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/DelegatingVector.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DelegatingVector (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/DenseVector.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/DenseVector.html
index d1d06ec..f6600b5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/DenseVector.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/DenseVector.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/DenseVector.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DenseVector (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/SparseVector.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/SparseVector.html
index 0ed30ef..647e87a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/SparseVector.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/SparseVector.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/SparseVector.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SparseVector (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/VectorView.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/VectorView.html
index a414aa2..a877734 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/VectorView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/VectorView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/VectorView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>VectorView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/VectorizedViewMatrix.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/VectorizedViewMatrix.html
index f45409a..30297f7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/VectorizedViewMatrix.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/VectorizedViewMatrix.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/VectorizedViewMatrix.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>VectorizedViewMatrix (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/class-use/DelegatingNamedVector.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/class-use/DelegatingNamedVector.html
index cb18849..311070e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/class-use/DelegatingNamedVector.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/class-use/DelegatingNamedVector.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/class-use/DelegatingNamedVector.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.primitives.vector.impl.DelegatingNamedVector (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/class-use/DelegatingVector.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/class-use/DelegatingVector.html
index 6b546b2..605eeeb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/class-use/DelegatingVector.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/class-use/DelegatingVector.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/class-use/DelegatingVector.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.primitives.vector.impl.DelegatingVector (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/class-use/DenseVector.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/class-use/DenseVector.html
index f476c69..749ed30 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/class-use/DenseVector.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/class-use/DenseVector.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/class-use/DenseVector.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.primitives.vector.impl.DenseVector (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/class-use/SparseVector.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/class-use/SparseVector.html
index e1babf2..0dcb59c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/class-use/SparseVector.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/class-use/SparseVector.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/class-use/SparseVector.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.primitives.vector.impl.SparseVector (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/class-use/VectorView.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/class-use/VectorView.html
index caef316..91c3e3a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/class-use/VectorView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/class-use/VectorView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/class-use/VectorView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.primitives.vector.impl.VectorView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/class-use/VectorizedViewMatrix.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/class-use/VectorizedViewMatrix.html
index 52e7fb0..1473e4d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/class-use/VectorizedViewMatrix.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/class-use/VectorizedViewMatrix.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/class-use/VectorizedViewMatrix.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.primitives.vector.impl.VectorizedViewMatrix (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/package-frame.html
index 2b67a81..316d685 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.primitives.vector.impl (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/package-summary.html
index cbd5fa1..0f6bfb8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.primitives.vector.impl (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/package-tree.html
index f183fa4..c101249 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.primitives.vector.impl Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/package-use.html
index 55184b1..22740f7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/impl/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.math.primitives.vector.impl (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/package-frame.html
index 32d3625..e2062d2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.primitives.vector (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/package-summary.html
index 6d4a3fd..3e304f4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.primitives.vector (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/package-tree.html
index addeda9..c9bc3bc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.primitives.vector Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/package-use.html
index eba270a..12b303a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.math.primitives.vector (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/DenseVectorStorage.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/DenseVectorStorage.html
index c24f962..7e71212 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/DenseVectorStorage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/DenseVectorStorage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/DenseVectorStorage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DenseVectorStorage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/SparseVectorStorage.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/SparseVectorStorage.html
index b88f55d..8784e79 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/SparseVectorStorage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/SparseVectorStorage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/SparseVectorStorage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SparseVectorStorage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/VectorViewStorage.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/VectorViewStorage.html
index daae5bd..63d528a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/VectorViewStorage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/VectorViewStorage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/VectorViewStorage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>VectorViewStorage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/VectorizedViewMatrixStorage.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/VectorizedViewMatrixStorage.html
index 66a85f1..fac603b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/VectorizedViewMatrixStorage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/VectorizedViewMatrixStorage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/VectorizedViewMatrixStorage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>VectorizedViewMatrixStorage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/class-use/DenseVectorStorage.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/class-use/DenseVectorStorage.html
index df0d00e..2602875 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/class-use/DenseVectorStorage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/class-use/DenseVectorStorage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/class-use/DenseVectorStorage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.primitives.vector.storage.DenseVectorStorage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/class-use/SparseVectorStorage.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/class-use/SparseVectorStorage.html
index e78f697..91ec9dc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/class-use/SparseVectorStorage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/class-use/SparseVectorStorage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/class-use/SparseVectorStorage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.primitives.vector.storage.SparseVectorStorage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/class-use/VectorViewStorage.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/class-use/VectorViewStorage.html
index 022d4d5..7d30160 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/class-use/VectorViewStorage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/class-use/VectorViewStorage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/class-use/VectorViewStorage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.primitives.vector.storage.VectorViewStorage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/class-use/VectorizedViewMatrixStorage.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/class-use/VectorizedViewMatrixStorage.html
index 073eb8d..f0a83f0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/class-use/VectorizedViewMatrixStorage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/class-use/VectorizedViewMatrixStorage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/class-use/VectorizedViewMatrixStorage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.primitives.vector.storage.VectorizedViewMatrixStorage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/package-frame.html
index 3a7993f..9d7dab6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.primitives.vector.storage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/package-summary.html
index df85eee..a533524 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.primitives.vector.storage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/package-tree.html
index 5fd00df..0ec57a9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.primitives.vector.storage Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/package-use.html
index 85cc85e..1ce61a1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/primitives/vector/storage/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.math.primitives.vector.storage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/Distribution.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/Distribution.html
index 56f630d..b39f737 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/Distribution.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/Distribution.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/stat/Distribution.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Distribution (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/DistributionMixture.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/DistributionMixture.html
index a93e39f..85bf3d0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/DistributionMixture.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/DistributionMixture.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/stat/DistributionMixture.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DistributionMixture (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/MultivariateGaussianDistribution.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/MultivariateGaussianDistribution.html
index 5410f1f..9d8d13d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/MultivariateGaussianDistribution.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/MultivariateGaussianDistribution.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/stat/MultivariateGaussianDistribution.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MultivariateGaussianDistribution (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/class-use/Distribution.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/class-use/Distribution.html
index 9f0ac05..4329516 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/class-use/Distribution.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/class-use/Distribution.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/stat/class-use/Distribution.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.math.stat.Distribution (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/class-use/DistributionMixture.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/class-use/DistributionMixture.html
index 9c194b4..7328302 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/class-use/DistributionMixture.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/class-use/DistributionMixture.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/stat/class-use/DistributionMixture.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.stat.DistributionMixture (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/class-use/MultivariateGaussianDistribution.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/class-use/MultivariateGaussianDistribution.html
index 7142b4b..80a76f4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/class-use/MultivariateGaussianDistribution.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/class-use/MultivariateGaussianDistribution.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/stat/class-use/MultivariateGaussianDistribution.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.stat.MultivariateGaussianDistribution (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/package-frame.html
index 3cd2ec5..478bc71 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/stat/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.stat (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/package-summary.html
index 68f9ca7..f35ed51 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/stat/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.stat (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/package-tree.html
index 977443b..869e47e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/stat/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.stat Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/package-use.html
index 6506934..a797b83 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/stat/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/stat/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.math.stat (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/util/MapUtil.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/util/MapUtil.html
index 431f860..10d6e42 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/util/MapUtil.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/util/MapUtil.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/util/MapUtil.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MapUtil (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/util/MatrixUtil.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/util/MatrixUtil.html
index 6cb4537..6f1d295 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/util/MatrixUtil.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/util/MatrixUtil.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/util/MatrixUtil.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MatrixUtil (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/util/class-use/MapUtil.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/util/class-use/MapUtil.html
index df21383..57c8bbb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/util/class-use/MapUtil.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/util/class-use/MapUtil.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/util/class-use/MapUtil.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.util.MapUtil (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/util/class-use/MatrixUtil.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/util/class-use/MatrixUtil.html
index 2dacd23..bbeffb0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/util/class-use/MatrixUtil.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/util/class-use/MatrixUtil.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/util/class-use/MatrixUtil.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.math.util.MatrixUtil (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/util/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/util/package-frame.html
index 303080d..766e90e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/util/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/util/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/util/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.util (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/util/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/util/package-summary.html
index 92b0608..6fb0f4a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/util/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/util/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/util/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.util (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/util/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/util/package-tree.html
index 50f848e..6111646 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/util/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/util/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/util/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.math.util Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/util/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/util/package-use.html
index 8d3fcc3..534dcd8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/math/util/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/math/util/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/math/util/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.math.util (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/multiclass/MultiClassModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/multiclass/MultiClassModel.html
index 4bcbfdb..ffd9c8a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/multiclass/MultiClassModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/multiclass/MultiClassModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/multiclass/MultiClassModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MultiClassModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/multiclass/OneVsRestTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/multiclass/OneVsRestTrainer.html
index c3c348a..f2c68f2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/multiclass/OneVsRestTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/multiclass/OneVsRestTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/multiclass/OneVsRestTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>OneVsRestTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/multiclass/class-use/MultiClassModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/multiclass/class-use/MultiClassModel.html
index 6aae08f..1c0392e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/multiclass/class-use/MultiClassModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/multiclass/class-use/MultiClassModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/multiclass/class-use/MultiClassModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.multiclass.MultiClassModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/multiclass/class-use/OneVsRestTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/multiclass/class-use/OneVsRestTrainer.html
index d0db3d6..95a3b31 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/multiclass/class-use/OneVsRestTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/multiclass/class-use/OneVsRestTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/multiclass/class-use/OneVsRestTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.multiclass.OneVsRestTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/multiclass/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/multiclass/package-frame.html
index 09537c8..4d6810a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/multiclass/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/multiclass/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/multiclass/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.multiclass (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/multiclass/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/multiclass/package-summary.html
index eb54209..7831273 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/multiclass/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/multiclass/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/multiclass/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.multiclass (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/multiclass/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/multiclass/package-tree.html
index 3ff9266..2e94b28 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/multiclass/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/multiclass/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/multiclass/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.multiclass Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/multiclass/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/multiclass/package-use.html
index 351b79a..4804944 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/multiclass/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/multiclass/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/multiclass/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.multiclass (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/BayesModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/BayesModel.html
index fa16ea2..3c378fc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/BayesModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/BayesModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/naivebayes/BayesModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BayesModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/class-use/BayesModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/class-use/BayesModel.html
index 8e57b39..8f80cdf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/class-use/BayesModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/class-use/BayesModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/naivebayes/class-use/BayesModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.naivebayes.BayesModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/compound/CompoundNaiveBayesModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/compound/CompoundNaiveBayesModel.html
index 1c1bff7..aefa585 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/compound/CompoundNaiveBayesModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/compound/CompoundNaiveBayesModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/naivebayes/compound/CompoundNaiveBayesModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CompoundNaiveBayesModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/compound/CompoundNaiveBayesTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/compound/CompoundNaiveBayesTrainer.html
index a946105..38655dd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/compound/CompoundNaiveBayesTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/compound/CompoundNaiveBayesTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/naivebayes/compound/CompoundNaiveBayesTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CompoundNaiveBayesTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/compound/class-use/CompoundNaiveBayesModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/compound/class-use/CompoundNaiveBayesModel.html
index 87b42f9..24c5152 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/compound/class-use/CompoundNaiveBayesModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/compound/class-use/CompoundNaiveBayesModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/naivebayes/compound/class-use/CompoundNaiveBayesModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.naivebayes.compound.CompoundNaiveBayesModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/compound/class-use/CompoundNaiveBayesTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/compound/class-use/CompoundNaiveBayesTrainer.html
index c62d470..f5cf399 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/compound/class-use/CompoundNaiveBayesTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/compound/class-use/CompoundNaiveBayesTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/naivebayes/compound/class-use/CompoundNaiveBayesTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.naivebayes.compound.CompoundNaiveBayesTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/compound/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/compound/package-frame.html
index 77b08b8..e13f6af 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/compound/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/compound/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/naivebayes/compound/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.naivebayes.compound (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/compound/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/compound/package-summary.html
index ff81ebf..63a6ebe 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/compound/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/compound/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/naivebayes/compound/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.naivebayes.compound (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/compound/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/compound/package-tree.html
index bf300cd..40c6eed 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/compound/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/compound/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/naivebayes/compound/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.naivebayes.compound Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/compound/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/compound/package-use.html
index 6311605..181978f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/compound/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/compound/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/naivebayes/compound/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.naivebayes.compound (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesModel.html
index 30bc653..bc3de02 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DiscreteNaiveBayesModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesSumsHolder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesSumsHolder.html
index 5504dd4..004178f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesSumsHolder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesSumsHolder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesSumsHolder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DiscreteNaiveBayesSumsHolder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesTrainer.html
index 66dbcf1..70ecbdd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DiscreteNaiveBayesTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/class-use/DiscreteNaiveBayesModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/class-use/DiscreteNaiveBayesModel.html
index bb03b0e..1f50b02 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/class-use/DiscreteNaiveBayesModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/class-use/DiscreteNaiveBayesModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/naivebayes/discrete/class-use/DiscreteNaiveBayesModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.naivebayes.discrete.DiscreteNaiveBayesModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/class-use/DiscreteNaiveBayesSumsHolder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/class-use/DiscreteNaiveBayesSumsHolder.html
index 44efe1c..cff93fc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/class-use/DiscreteNaiveBayesSumsHolder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/class-use/DiscreteNaiveBayesSumsHolder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/naivebayes/discrete/class-use/DiscreteNaiveBayesSumsHolder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.naivebayes.discrete.DiscreteNaiveBayesSumsHolder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/class-use/DiscreteNaiveBayesTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/class-use/DiscreteNaiveBayesTrainer.html
index e2684ff..5c40237 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/class-use/DiscreteNaiveBayesTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/class-use/DiscreteNaiveBayesTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/naivebayes/discrete/class-use/DiscreteNaiveBayesTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.naivebayes.discrete.DiscreteNaiveBayesTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/package-frame.html
index 17c8e58..01cb604 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/naivebayes/discrete/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.naivebayes.discrete (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/package-summary.html
index 04d999c..4229310 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/naivebayes/discrete/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.naivebayes.discrete (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/package-tree.html
index 9e5e3df..34eedf8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/naivebayes/discrete/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.naivebayes.discrete Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/package-use.html
index 65b5dba..550edb9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/discrete/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/naivebayes/discrete/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.naivebayes.discrete (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/gaussian/GaussianNaiveBayesModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/gaussian/GaussianNaiveBayesModel.html
index ec1d84d..ad3c641 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/gaussian/GaussianNaiveBayesModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/gaussian/GaussianNaiveBayesModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/naivebayes/gaussian/GaussianNaiveBayesModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GaussianNaiveBayesModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/gaussian/GaussianNaiveBayesTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/gaussian/GaussianNaiveBayesTrainer.html
index c70b6ae..643b157 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/gaussian/GaussianNaiveBayesTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/gaussian/GaussianNaiveBayesTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/naivebayes/gaussian/GaussianNaiveBayesTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GaussianNaiveBayesTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/gaussian/class-use/GaussianNaiveBayesModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/gaussian/class-use/GaussianNaiveBayesModel.html
index f407879..c0f1c92 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/gaussian/class-use/GaussianNaiveBayesModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/gaussian/class-use/GaussianNaiveBayesModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/naivebayes/gaussian/class-use/GaussianNaiveBayesModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.naivebayes.gaussian.GaussianNaiveBayesModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/gaussian/class-use/GaussianNaiveBayesTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/gaussian/class-use/GaussianNaiveBayesTrainer.html
index e385f7d..ea7f34f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/gaussian/class-use/GaussianNaiveBayesTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/gaussian/class-use/GaussianNaiveBayesTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/naivebayes/gaussian/class-use/GaussianNaiveBayesTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.naivebayes.gaussian.GaussianNaiveBayesTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/gaussian/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/gaussian/package-frame.html
index d885a4f..a01e3ff 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/gaussian/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/gaussian/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/naivebayes/gaussian/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.naivebayes.gaussian (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/gaussian/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/gaussian/package-summary.html
index 1676a46..7bbb722 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/gaussian/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/gaussian/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/naivebayes/gaussian/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.naivebayes.gaussian (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/gaussian/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/gaussian/package-tree.html
index 1521d3d..242b40f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/gaussian/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/gaussian/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/naivebayes/gaussian/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.naivebayes.gaussian Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/gaussian/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/gaussian/package-use.html
index ecaaecd..5c032e7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/gaussian/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/gaussian/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/naivebayes/gaussian/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.naivebayes.gaussian (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/package-frame.html
index 277bfb3..6aee104 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/naivebayes/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.naivebayes (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/package-summary.html
index 7609c90..df6bc6b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/naivebayes/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.naivebayes (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/package-tree.html
index af49fc1..045d59a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/naivebayes/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.naivebayes Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/package-use.html
index c697445..596bdb1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/naivebayes/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/naivebayes/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.naivebayes (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/Activators.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/Activators.html
index 5858618..161715e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/Activators.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/Activators.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/nn/Activators.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Activators (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/MLPLayer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/MLPLayer.html
index 331ccd4..4919333 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/MLPLayer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/MLPLayer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/nn/MLPLayer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MLPLayer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/MLPState.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/MLPState.html
index 5d18292..c53730d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/MLPState.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/MLPState.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/nn/MLPState.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MLPState (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/MLPTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/MLPTrainer.html
index fd95f73..239c14c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/MLPTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/MLPTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/nn/MLPTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MLPTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/MultilayerPerceptron.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/MultilayerPerceptron.html
index 15a0012..9056c08 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/MultilayerPerceptron.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/MultilayerPerceptron.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/nn/MultilayerPerceptron.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MultilayerPerceptron (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/UpdatesStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/UpdatesStrategy.html
index e4c5f6e..598d18c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/UpdatesStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/UpdatesStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/nn/UpdatesStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>UpdatesStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/LayerArchitecture.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/LayerArchitecture.html
index c84ab74..b320da1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/LayerArchitecture.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/LayerArchitecture.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/nn/architecture/LayerArchitecture.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LayerArchitecture (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/MLPArchitecture.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/MLPArchitecture.html
index e79cce8..7709555 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/MLPArchitecture.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/MLPArchitecture.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/nn/architecture/MLPArchitecture.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MLPArchitecture (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/TransformationLayerArchitecture.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/TransformationLayerArchitecture.html
index 101180e..e8ced83 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/TransformationLayerArchitecture.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/TransformationLayerArchitecture.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/nn/architecture/TransformationLayerArchitecture.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TransformationLayerArchitecture (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/class-use/LayerArchitecture.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/class-use/LayerArchitecture.html
index a6890d6..d4e54b4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/class-use/LayerArchitecture.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/class-use/LayerArchitecture.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/nn/architecture/class-use/LayerArchitecture.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.nn.architecture.LayerArchitecture (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/class-use/MLPArchitecture.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/class-use/MLPArchitecture.html
index 34605b1..65b73e1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/class-use/MLPArchitecture.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/class-use/MLPArchitecture.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/nn/architecture/class-use/MLPArchitecture.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.nn.architecture.MLPArchitecture (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/class-use/TransformationLayerArchitecture.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/class-use/TransformationLayerArchitecture.html
index 2f9274c..0284343 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/class-use/TransformationLayerArchitecture.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/class-use/TransformationLayerArchitecture.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/nn/architecture/class-use/TransformationLayerArchitecture.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.nn.architecture.TransformationLayerArchitecture (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/package-frame.html
index 8d59cd5..5215f52 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/nn/architecture/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.nn.architecture (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/package-summary.html
index 7091430..f6a9e2a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/nn/architecture/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.nn.architecture (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/package-tree.html
index e6a887c..c9dd248 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/nn/architecture/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.nn.architecture Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/package-use.html
index ed23e69..4d1e180 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/architecture/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/nn/architecture/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.nn.architecture (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/class-use/Activators.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/class-use/Activators.html
index df920a6..d9b63df 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/class-use/Activators.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/class-use/Activators.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/nn/class-use/Activators.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.nn.Activators (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/class-use/MLPLayer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/class-use/MLPLayer.html
index 503c1c0..298fcce 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/class-use/MLPLayer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/class-use/MLPLayer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/nn/class-use/MLPLayer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.nn.MLPLayer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/class-use/MLPState.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/class-use/MLPState.html
index 8297f53..778a7a5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/class-use/MLPState.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/class-use/MLPState.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/nn/class-use/MLPState.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.nn.MLPState (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/class-use/MLPTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/class-use/MLPTrainer.html
index e9f0c0a..0090c08 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/class-use/MLPTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/class-use/MLPTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/nn/class-use/MLPTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.nn.MLPTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/class-use/MultilayerPerceptron.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/class-use/MultilayerPerceptron.html
index b226783..dcbeb1f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/class-use/MultilayerPerceptron.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/class-use/MultilayerPerceptron.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/nn/class-use/MultilayerPerceptron.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.nn.MultilayerPerceptron (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/class-use/UpdatesStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/class-use/UpdatesStrategy.html
index d55e198..67b1dbc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/class-use/UpdatesStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/class-use/UpdatesStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/nn/class-use/UpdatesStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.nn.UpdatesStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/initializers/MLPInitializer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/initializers/MLPInitializer.html
index a273692..60c764f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/initializers/MLPInitializer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/initializers/MLPInitializer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/nn/initializers/MLPInitializer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MLPInitializer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/initializers/RandomInitializer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/initializers/RandomInitializer.html
index 9fb0752..250a03b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/initializers/RandomInitializer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/initializers/RandomInitializer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/nn/initializers/RandomInitializer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>RandomInitializer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/initializers/class-use/MLPInitializer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/initializers/class-use/MLPInitializer.html
index 9b12e1f..8cffd06 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/initializers/class-use/MLPInitializer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/initializers/class-use/MLPInitializer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/nn/initializers/class-use/MLPInitializer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.nn.initializers.MLPInitializer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/initializers/class-use/RandomInitializer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/initializers/class-use/RandomInitializer.html
index cf07467..2cdbf66 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/initializers/class-use/RandomInitializer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/initializers/class-use/RandomInitializer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/nn/initializers/class-use/RandomInitializer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.nn.initializers.RandomInitializer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/initializers/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/initializers/package-frame.html
index f3550c6..eafc752 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/initializers/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/initializers/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/nn/initializers/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.nn.initializers (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/initializers/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/initializers/package-summary.html
index fdf29a1..67dee45 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/initializers/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/initializers/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/nn/initializers/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.nn.initializers (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/initializers/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/initializers/package-tree.html
index 640fbba..9351902 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/initializers/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/initializers/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/nn/initializers/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.nn.initializers Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/initializers/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/initializers/package-use.html
index c55f91a..8876c7c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/initializers/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/initializers/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/nn/initializers/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.nn.initializers (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/package-frame.html
index 2344c9a..b774711 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/nn/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.nn (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/package-summary.html
index 6dc798b..69b7644 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/nn/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.nn (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/package-tree.html
index 4c6a0b8..fcc6b64 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/nn/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.nn Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/package-use.html
index 145972d..9a940d1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/nn/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/nn/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.nn (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/LossFunctions.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/LossFunctions.html
index b744771..ce0fba1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/LossFunctions.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/LossFunctions.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/optimization/LossFunctions.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LossFunctions (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/Parametrized.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/Parametrized.html
index 7d6bee6..b03f72b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/Parametrized.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/Parametrized.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/optimization/Parametrized.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Parametrized (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/SmoothParametrized.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/SmoothParametrized.html
index 529363a..239b517 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/SmoothParametrized.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/SmoothParametrized.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/optimization/SmoothParametrized.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SmoothParametrized (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/class-use/LossFunctions.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/class-use/LossFunctions.html
index 755cc7b..074184e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/class-use/LossFunctions.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/class-use/LossFunctions.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/optimization/class-use/LossFunctions.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.optimization.LossFunctions (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/class-use/Parametrized.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/class-use/Parametrized.html
index e785982..7cb7a80 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/class-use/Parametrized.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/class-use/Parametrized.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/optimization/class-use/Parametrized.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.optimization.Parametrized (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/class-use/SmoothParametrized.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/class-use/SmoothParametrized.html
index 2cb42f8..cc27f7f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/class-use/SmoothParametrized.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/class-use/SmoothParametrized.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/optimization/class-use/SmoothParametrized.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.optimization.SmoothParametrized (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/package-frame.html
index 8f75e9f..5454fbc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/optimization/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.optimization (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/package-summary.html
index e9fe73a..7f45ad0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/optimization/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.optimization (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/package-tree.html
index 2ccc6cc..c32528b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/optimization/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.optimization Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/package-use.html
index 3b2583c..3dbbea0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/optimization/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.optimization (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/NesterovParameterUpdate.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/NesterovParameterUpdate.html
index 9af5235..2786971 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/NesterovParameterUpdate.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/NesterovParameterUpdate.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/optimization/updatecalculators/NesterovParameterUpdate.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NesterovParameterUpdate (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/NesterovUpdateCalculator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/NesterovUpdateCalculator.html
index 219c500..4df334b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/NesterovUpdateCalculator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/NesterovUpdateCalculator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/optimization/updatecalculators/NesterovUpdateCalculator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NesterovUpdateCalculator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/ParameterUpdateCalculator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/ParameterUpdateCalculator.html
index dbf53e7..d06d300 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/ParameterUpdateCalculator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/ParameterUpdateCalculator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/optimization/updatecalculators/ParameterUpdateCalculator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ParameterUpdateCalculator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/RPropParameterUpdate.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/RPropParameterUpdate.html
index ee30d09..9e34658 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/RPropParameterUpdate.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/RPropParameterUpdate.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/optimization/updatecalculators/RPropParameterUpdate.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>RPropParameterUpdate (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/RPropUpdateCalculator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/RPropUpdateCalculator.html
index 5e27351..8a51cd1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/RPropUpdateCalculator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/RPropUpdateCalculator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/optimization/updatecalculators/RPropUpdateCalculator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>RPropUpdateCalculator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/SimpleGDParameterUpdate.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/SimpleGDParameterUpdate.html
index cf8c427..c8ccd94 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/SimpleGDParameterUpdate.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/SimpleGDParameterUpdate.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/optimization/updatecalculators/SimpleGDParameterUpdate.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SimpleGDParameterUpdate (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/SimpleGDUpdateCalculator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/SimpleGDUpdateCalculator.html
index 83d75df..a45ce16 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/SimpleGDUpdateCalculator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/SimpleGDUpdateCalculator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/optimization/updatecalculators/SimpleGDUpdateCalculator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SimpleGDUpdateCalculator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/class-use/NesterovParameterUpdate.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/class-use/NesterovParameterUpdate.html
index 577d157..3c248fe 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/class-use/NesterovParameterUpdate.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/class-use/NesterovParameterUpdate.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/optimization/updatecalculators/class-use/NesterovParameterUpdate.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.optimization.updatecalculators.NesterovParameterUpdate (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/class-use/NesterovUpdateCalculator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/class-use/NesterovUpdateCalculator.html
index 704d77a..9ecbf53 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/class-use/NesterovUpdateCalculator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/class-use/NesterovUpdateCalculator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/optimization/updatecalculators/class-use/NesterovUpdateCalculator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.optimization.updatecalculators.NesterovUpdateCalculator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/class-use/ParameterUpdateCalculator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/class-use/ParameterUpdateCalculator.html
index 7c9a561..f95fbea 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/class-use/ParameterUpdateCalculator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/class-use/ParameterUpdateCalculator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/optimization/updatecalculators/class-use/ParameterUpdateCalculator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.optimization.updatecalculators.ParameterUpdateCalculator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/class-use/RPropParameterUpdate.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/class-use/RPropParameterUpdate.html
index 04efb88..f60b035 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/class-use/RPropParameterUpdate.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/class-use/RPropParameterUpdate.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/optimization/updatecalculators/class-use/RPropParameterUpdate.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.optimization.updatecalculators.RPropParameterUpdate (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/class-use/RPropUpdateCalculator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/class-use/RPropUpdateCalculator.html
index 841eb7f..c8c77c7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/class-use/RPropUpdateCalculator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/class-use/RPropUpdateCalculator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/optimization/updatecalculators/class-use/RPropUpdateCalculator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.optimization.updatecalculators.RPropUpdateCalculator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/class-use/SimpleGDParameterUpdate.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/class-use/SimpleGDParameterUpdate.html
index e0799a9..b3e173b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/class-use/SimpleGDParameterUpdate.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/class-use/SimpleGDParameterUpdate.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/optimization/updatecalculators/class-use/SimpleGDParameterUpdate.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.optimization.updatecalculators.SimpleGDParameterUpdate (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/class-use/SimpleGDUpdateCalculator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/class-use/SimpleGDUpdateCalculator.html
index 9ada2ce..e30b3c2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/class-use/SimpleGDUpdateCalculator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/class-use/SimpleGDUpdateCalculator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/optimization/updatecalculators/class-use/SimpleGDUpdateCalculator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.optimization.updatecalculators.SimpleGDUpdateCalculator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/package-frame.html
index 471afb1..abb0bd9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/optimization/updatecalculators/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.optimization.updatecalculators (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/package-summary.html
index 9713f8e..083c2a1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/optimization/updatecalculators/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.optimization.updatecalculators (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/package-tree.html
index 281db01..db50cb9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/optimization/updatecalculators/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.optimization.updatecalculators Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/package-use.html
index 632820c..115d8df 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/optimization/updatecalculators/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/optimization/updatecalculators/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.optimization.updatecalculators (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/package-frame.html
index 7169db7..a32c8dd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/package-summary.html
index 4c13d0a..2239825 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/package-tree.html
index 055e544..9c02b8a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/package-use.html
index 80cf51b..ec85672 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/pipeline/Pipeline.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/pipeline/Pipeline.html
index ce852b0..c959e8c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/pipeline/Pipeline.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/pipeline/Pipeline.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/pipeline/Pipeline.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Pipeline (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/pipeline/PipelineMdl.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/pipeline/PipelineMdl.html
index 7613c26..4743fdb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/pipeline/PipelineMdl.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/pipeline/PipelineMdl.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/pipeline/PipelineMdl.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PipelineMdl (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/pipeline/class-use/Pipeline.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/pipeline/class-use/Pipeline.html
index 2f3e5ab..55aef1a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/pipeline/class-use/Pipeline.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/pipeline/class-use/Pipeline.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/pipeline/class-use/Pipeline.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.pipeline.Pipeline (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/pipeline/class-use/PipelineMdl.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/pipeline/class-use/PipelineMdl.html
index c8bafc9..d5523c5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/pipeline/class-use/PipelineMdl.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/pipeline/class-use/PipelineMdl.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/pipeline/class-use/PipelineMdl.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.pipeline.PipelineMdl (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/pipeline/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/pipeline/package-frame.html
index 5ce003a..8f33871 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/pipeline/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/pipeline/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/pipeline/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.pipeline (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/pipeline/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/pipeline/package-summary.html
index d16b88c..5d82f7a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/pipeline/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/pipeline/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/pipeline/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.pipeline (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/pipeline/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/pipeline/package-tree.html
index af592bd..e04c36d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/pipeline/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/pipeline/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/pipeline/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.pipeline Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/pipeline/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/pipeline/package-use.html
index 15156b0..e94e707 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/pipeline/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/pipeline/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/pipeline/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.pipeline (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/PreprocessingTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/PreprocessingTrainer.html
index b2ef6e7..a73d0bb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/PreprocessingTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/PreprocessingTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/PreprocessingTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PreprocessingTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/Preprocessor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/Preprocessor.html
index 4ae6a97..befebb0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/Preprocessor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/Preprocessor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/Preprocessor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Preprocessor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/binarization/BinarizationPreprocessor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/binarization/BinarizationPreprocessor.html
index 94f4fe7..048f85a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/binarization/BinarizationPreprocessor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/binarization/BinarizationPreprocessor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/binarization/BinarizationPreprocessor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BinarizationPreprocessor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/binarization/BinarizationTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/binarization/BinarizationTrainer.html
index c86f996..7e97c85 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/binarization/BinarizationTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/binarization/BinarizationTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/binarization/BinarizationTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BinarizationTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/binarization/class-use/BinarizationPreprocessor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/binarization/class-use/BinarizationPreprocessor.html
index 4066edd..33fb1e3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/binarization/class-use/BinarizationPreprocessor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/binarization/class-use/BinarizationPreprocessor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/binarization/class-use/BinarizationPreprocessor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.preprocessing.binarization.BinarizationPreprocessor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/binarization/class-use/BinarizationTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/binarization/class-use/BinarizationTrainer.html
index 1746060..3210b13 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/binarization/class-use/BinarizationTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/binarization/class-use/BinarizationTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/binarization/class-use/BinarizationTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.preprocessing.binarization.BinarizationTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/binarization/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/binarization/package-frame.html
index 3fca9e1..6047bfc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/binarization/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/binarization/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/binarization/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.binarization (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/binarization/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/binarization/package-summary.html
index 542d300..2dea16a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/binarization/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/binarization/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/binarization/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.binarization (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/binarization/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/binarization/package-tree.html
index 6f4b67b..e4f2b9e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/binarization/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/binarization/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/binarization/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.binarization Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/binarization/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/binarization/package-use.html
index 924260e..529f87f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/binarization/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/binarization/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/binarization/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.preprocessing.binarization (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/class-use/PreprocessingTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/class-use/PreprocessingTrainer.html
index cb3fa33..85d1278 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/class-use/PreprocessingTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/class-use/PreprocessingTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/class-use/PreprocessingTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.preprocessing.PreprocessingTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/class-use/Preprocessor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/class-use/Preprocessor.html
index 5eeaf27..7b47fd0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/class-use/Preprocessor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/class-use/Preprocessor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/class-use/Preprocessor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.preprocessing.Preprocessor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/developer/MappedPreprocessor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/developer/MappedPreprocessor.html
index a0940ab..f918b53 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/developer/MappedPreprocessor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/developer/MappedPreprocessor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/developer/MappedPreprocessor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MappedPreprocessor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/developer/PatchedPreprocessor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/developer/PatchedPreprocessor.html
index f872ce5..e46a352 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/developer/PatchedPreprocessor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/developer/PatchedPreprocessor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/developer/PatchedPreprocessor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PatchedPreprocessor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/developer/class-use/MappedPreprocessor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/developer/class-use/MappedPreprocessor.html
index 9af59a0..e3e83c0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/developer/class-use/MappedPreprocessor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/developer/class-use/MappedPreprocessor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/developer/class-use/MappedPreprocessor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.preprocessing.developer.MappedPreprocessor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/developer/class-use/PatchedPreprocessor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/developer/class-use/PatchedPreprocessor.html
index 57f2a23..e3e25a3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/developer/class-use/PatchedPreprocessor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/developer/class-use/PatchedPreprocessor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/developer/class-use/PatchedPreprocessor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.preprocessing.developer.PatchedPreprocessor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/developer/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/developer/package-frame.html
index e99eca9..08a495f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/developer/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/developer/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/developer/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.developer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/developer/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/developer/package-summary.html
index d659e4a..b18cc4d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/developer/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/developer/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/developer/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.developer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/developer/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/developer/package-tree.html
index 02d5534..4b72ae3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/developer/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/developer/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/developer/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.developer Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/developer/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/developer/package-use.html
index f52f335..a89fc2e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/developer/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/developer/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/developer/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.preprocessing.developer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/EncoderPartitionData.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/EncoderPartitionData.html
index 3c89606..ac10400 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/EncoderPartitionData.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/EncoderPartitionData.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/EncoderPartitionData.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>EncoderPartitionData (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/EncoderPreprocessor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/EncoderPreprocessor.html
index f5b3a7f..236621f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/EncoderPreprocessor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/EncoderPreprocessor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/EncoderPreprocessor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>EncoderPreprocessor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/EncoderSortingStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/EncoderSortingStrategy.html
index f9e49dc..58f4ece 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/EncoderSortingStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/EncoderSortingStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/EncoderSortingStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>EncoderSortingStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/EncoderTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/EncoderTrainer.html
index 36dfae7..3e8ccfa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/EncoderTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/EncoderTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/EncoderTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>EncoderTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/EncoderType.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/EncoderType.html
index f57d607..f737911 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/EncoderType.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/EncoderType.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/EncoderType.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>EncoderType (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/class-use/EncoderPartitionData.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/class-use/EncoderPartitionData.html
index fef050b..591032b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/class-use/EncoderPartitionData.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/class-use/EncoderPartitionData.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/class-use/EncoderPartitionData.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.preprocessing.encoding.EncoderPartitionData (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/class-use/EncoderPreprocessor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/class-use/EncoderPreprocessor.html
index 55b9d06..bd4bc3e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/class-use/EncoderPreprocessor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/class-use/EncoderPreprocessor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/class-use/EncoderPreprocessor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.preprocessing.encoding.EncoderPreprocessor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/class-use/EncoderSortingStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/class-use/EncoderSortingStrategy.html
index f38dd70..61966a4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/class-use/EncoderSortingStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/class-use/EncoderSortingStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/class-use/EncoderSortingStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.preprocessing.encoding.EncoderSortingStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/class-use/EncoderTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/class-use/EncoderTrainer.html
index 25d84a4..517d310 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/class-use/EncoderTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/class-use/EncoderTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/class-use/EncoderTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.preprocessing.encoding.EncoderTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/class-use/EncoderType.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/class-use/EncoderType.html
index c5d818b..f98daa6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/class-use/EncoderType.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/class-use/EncoderType.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/class-use/EncoderType.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.preprocessing.encoding.EncoderType (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/frequency/FrequencyEncoderPreprocessor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/frequency/FrequencyEncoderPreprocessor.html
index 81ec898..44a68ab 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/frequency/FrequencyEncoderPreprocessor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/frequency/FrequencyEncoderPreprocessor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/frequency/FrequencyEncoderPreprocessor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>FrequencyEncoderPreprocessor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/frequency/class-use/FrequencyEncoderPreprocessor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/frequency/class-use/FrequencyEncoderPreprocessor.html
index 1eed09b..ab8cdc2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/frequency/class-use/FrequencyEncoderPreprocessor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/frequency/class-use/FrequencyEncoderPreprocessor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/frequency/class-use/FrequencyEncoderPreprocessor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.preprocessing.encoding.frequency.FrequencyEncoderPreprocessor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/frequency/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/frequency/package-frame.html
index 5f75250..eb6520c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/frequency/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/frequency/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/frequency/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.encoding.frequency (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/frequency/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/frequency/package-summary.html
index 80cb0b8..b9f2ffe 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/frequency/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/frequency/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/frequency/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.encoding.frequency (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/frequency/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/frequency/package-tree.html
index 3164dcf..415faa0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/frequency/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/frequency/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/frequency/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.encoding.frequency Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/frequency/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/frequency/package-use.html
index 5f97ea3..c2a1ca7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/frequency/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/frequency/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/frequency/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.preprocessing.encoding.frequency (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/label/LabelEncoderPreprocessor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/label/LabelEncoderPreprocessor.html
index c27e0ca..7969ab3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/label/LabelEncoderPreprocessor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/label/LabelEncoderPreprocessor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/label/LabelEncoderPreprocessor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LabelEncoderPreprocessor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/label/class-use/LabelEncoderPreprocessor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/label/class-use/LabelEncoderPreprocessor.html
index c80c325..71044db 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/label/class-use/LabelEncoderPreprocessor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/label/class-use/LabelEncoderPreprocessor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/label/class-use/LabelEncoderPreprocessor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.preprocessing.encoding.label.LabelEncoderPreprocessor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/label/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/label/package-frame.html
index cc9dfba..f7dad3b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/label/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/label/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/label/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.encoding.label (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/label/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/label/package-summary.html
index 885dd16..7784600 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/label/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/label/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/label/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.encoding.label (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/label/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/label/package-tree.html
index 022f665..f5ff7f2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/label/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/label/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/label/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.encoding.label Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/label/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/label/package-use.html
index 2ec99dc..0071456 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/label/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/label/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/label/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.preprocessing.encoding.label (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/onehotencoder/OneHotEncoderPreprocessor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/onehotencoder/OneHotEncoderPreprocessor.html
index 96ee10d..6325055 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/onehotencoder/OneHotEncoderPreprocessor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/onehotencoder/OneHotEncoderPreprocessor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/onehotencoder/OneHotEncoderPreprocessor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>OneHotEncoderPreprocessor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/onehotencoder/class-use/OneHotEncoderPreprocessor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/onehotencoder/class-use/OneHotEncoderPreprocessor.html
index 29550e3..514db56 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/onehotencoder/class-use/OneHotEncoderPreprocessor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/onehotencoder/class-use/OneHotEncoderPreprocessor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/onehotencoder/class-use/OneHotEncoderPreprocessor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.preprocessing.encoding.onehotencoder.OneHotEncoderPreprocessor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/onehotencoder/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/onehotencoder/package-frame.html
index d3803e7..1cb9c3f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/onehotencoder/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/onehotencoder/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/onehotencoder/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.encoding.onehotencoder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/onehotencoder/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/onehotencoder/package-summary.html
index cbebd9b..ca063fe 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/onehotencoder/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/onehotencoder/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/onehotencoder/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.encoding.onehotencoder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/onehotencoder/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/onehotencoder/package-tree.html
index fbba4ee..3219230 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/onehotencoder/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/onehotencoder/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/onehotencoder/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.encoding.onehotencoder Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/onehotencoder/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/onehotencoder/package-use.html
index 0d321ae..746e399 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/onehotencoder/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/onehotencoder/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/onehotencoder/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.preprocessing.encoding.onehotencoder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/package-frame.html
index f6f9b3b..7ed5b95 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.encoding (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/package-summary.html
index 73204a0..8a36e5c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.encoding (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/package-tree.html
index 0814b63..c219c32 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.encoding Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/package-use.html
index 4541723..93cd8b2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.preprocessing.encoding (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/stringencoder/StringEncoderPreprocessor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/stringencoder/StringEncoderPreprocessor.html
index 03eacf7..76730b1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/stringencoder/StringEncoderPreprocessor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/stringencoder/StringEncoderPreprocessor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/stringencoder/StringEncoderPreprocessor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>StringEncoderPreprocessor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/stringencoder/class-use/StringEncoderPreprocessor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/stringencoder/class-use/StringEncoderPreprocessor.html
index 9df9594..921edfa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/stringencoder/class-use/StringEncoderPreprocessor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/stringencoder/class-use/StringEncoderPreprocessor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/stringencoder/class-use/StringEncoderPreprocessor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.preprocessing.encoding.stringencoder.StringEncoderPreprocessor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/stringencoder/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/stringencoder/package-frame.html
index c2efd3c..6670644 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/stringencoder/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/stringencoder/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/stringencoder/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.encoding.stringencoder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/stringencoder/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/stringencoder/package-summary.html
index ad3a8ff..7057733 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/stringencoder/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/stringencoder/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/stringencoder/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.encoding.stringencoder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/stringencoder/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/stringencoder/package-tree.html
index 5427ada..9779d00 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/stringencoder/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/stringencoder/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/stringencoder/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.encoding.stringencoder Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/stringencoder/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/stringencoder/package-use.html
index 8f543e9..bfb7ac2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/stringencoder/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/encoding/stringencoder/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/encoding/stringencoder/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.preprocessing.encoding.stringencoder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/finalization/VectorFinalizationPreprocessor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/finalization/VectorFinalizationPreprocessor.html
index 76bae8b..56f85e5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/finalization/VectorFinalizationPreprocessor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/finalization/VectorFinalizationPreprocessor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/finalization/VectorFinalizationPreprocessor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>VectorFinalizationPreprocessor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/finalization/VectorFinalizationTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/finalization/VectorFinalizationTrainer.html
index 6836214..929c67c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/finalization/VectorFinalizationTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/finalization/VectorFinalizationTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/finalization/VectorFinalizationTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>VectorFinalizationTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/finalization/class-use/VectorFinalizationPreprocessor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/finalization/class-use/VectorFinalizationPreprocessor.html
index c11bccb..7ffd6df 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/finalization/class-use/VectorFinalizationPreprocessor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/finalization/class-use/VectorFinalizationPreprocessor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/finalization/class-use/VectorFinalizationPreprocessor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.preprocessing.finalization.VectorFinalizationPreprocessor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/finalization/class-use/VectorFinalizationTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/finalization/class-use/VectorFinalizationTrainer.html
index 789ece1..7d88fe8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/finalization/class-use/VectorFinalizationTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/finalization/class-use/VectorFinalizationTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/finalization/class-use/VectorFinalizationTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.preprocessing.finalization.VectorFinalizationTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/finalization/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/finalization/package-frame.html
index a850808..0bf55c7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/finalization/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/finalization/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/finalization/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.finalization (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/finalization/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/finalization/package-summary.html
index 1bae1bd..3859796 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/finalization/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/finalization/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/finalization/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.finalization (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/finalization/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/finalization/package-tree.html
index 12111f8..bacb8a9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/finalization/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/finalization/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/finalization/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.finalization Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/finalization/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/finalization/package-use.html
index b852fa5..ebfb6b5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/finalization/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/finalization/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/finalization/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.preprocessing.finalization (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/ImputerPartitionData.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/ImputerPartitionData.html
index 05a6c7eb..5e5db2f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/ImputerPartitionData.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/ImputerPartitionData.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/imputing/ImputerPartitionData.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ImputerPartitionData (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/ImputerPreprocessor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/ImputerPreprocessor.html
index 62cd449..602f71c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/ImputerPreprocessor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/ImputerPreprocessor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/imputing/ImputerPreprocessor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ImputerPreprocessor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/ImputerTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/ImputerTrainer.html
index 44b13b6..c5f0c02 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/ImputerTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/ImputerTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/imputing/ImputerTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ImputerTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/ImputingStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/ImputingStrategy.html
index 4ed2d93..85b753f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/ImputingStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/ImputingStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/imputing/ImputingStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ImputingStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/class-use/ImputerPartitionData.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/class-use/ImputerPartitionData.html
index 5c73a53..d5da329 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/class-use/ImputerPartitionData.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/class-use/ImputerPartitionData.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/imputing/class-use/ImputerPartitionData.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.preprocessing.imputing.ImputerPartitionData (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/class-use/ImputerPreprocessor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/class-use/ImputerPreprocessor.html
index 9366127..45b6bb9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/class-use/ImputerPreprocessor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/class-use/ImputerPreprocessor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/imputing/class-use/ImputerPreprocessor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.preprocessing.imputing.ImputerPreprocessor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/class-use/ImputerTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/class-use/ImputerTrainer.html
index d3f508f..161a8c9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/class-use/ImputerTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/class-use/ImputerTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/imputing/class-use/ImputerTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.preprocessing.imputing.ImputerTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/class-use/ImputingStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/class-use/ImputingStrategy.html
index f2f5fdb..858c88d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/class-use/ImputingStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/class-use/ImputingStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/imputing/class-use/ImputingStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.preprocessing.imputing.ImputingStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/package-frame.html
index f70cb97..e77b3b8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/imputing/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.imputing (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/package-summary.html
index 7566a8c..5d24769 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/imputing/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.imputing (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/package-tree.html
index d908d65..979bf42 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/imputing/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.imputing Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/package-use.html
index 5827c09..c26f0f6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/imputing/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/imputing/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.preprocessing.imputing (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/MaxAbsScalerPartitionData.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/MaxAbsScalerPartitionData.html
index a565db0..f7a7a38 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/MaxAbsScalerPartitionData.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/MaxAbsScalerPartitionData.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/MaxAbsScalerPartitionData.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MaxAbsScalerPartitionData (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/MaxAbsScalerPreprocessor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/MaxAbsScalerPreprocessor.html
index cec6fcc..e0e1376 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/MaxAbsScalerPreprocessor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/MaxAbsScalerPreprocessor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/MaxAbsScalerPreprocessor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MaxAbsScalerPreprocessor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/MaxAbsScalerTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/MaxAbsScalerTrainer.html
index 7d7cc25..4f52107 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/MaxAbsScalerTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/MaxAbsScalerTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/MaxAbsScalerTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MaxAbsScalerTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/class-use/MaxAbsScalerPartitionData.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/class-use/MaxAbsScalerPartitionData.html
index c2ef09f..3e67cab 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/class-use/MaxAbsScalerPartitionData.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/class-use/MaxAbsScalerPartitionData.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/class-use/MaxAbsScalerPartitionData.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.preprocessing.maxabsscaling.MaxAbsScalerPartitionData (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/class-use/MaxAbsScalerPreprocessor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/class-use/MaxAbsScalerPreprocessor.html
index 66ffb11..2b210b8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/class-use/MaxAbsScalerPreprocessor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/class-use/MaxAbsScalerPreprocessor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/class-use/MaxAbsScalerPreprocessor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.preprocessing.maxabsscaling.MaxAbsScalerPreprocessor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/class-use/MaxAbsScalerTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/class-use/MaxAbsScalerTrainer.html
index bb0bc2c..d38515d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/class-use/MaxAbsScalerTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/class-use/MaxAbsScalerTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/class-use/MaxAbsScalerTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.preprocessing.maxabsscaling.MaxAbsScalerTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/package-frame.html
index 857b252..90325ce 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.maxabsscaling (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/package-summary.html
index 562356a..6e61bec 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.maxabsscaling (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/package-tree.html
index 6e67a70..172e941 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.maxabsscaling Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/package-use.html
index 7dbd981..4ff7385 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/maxabsscaling/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.preprocessing.maxabsscaling (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/MinMaxScalerPartitionData.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/MinMaxScalerPartitionData.html
index 22c67d2..fb08c85 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/MinMaxScalerPartitionData.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/MinMaxScalerPartitionData.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/MinMaxScalerPartitionData.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MinMaxScalerPartitionData (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/MinMaxScalerPreprocessor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/MinMaxScalerPreprocessor.html
index d07d361..af0165a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/MinMaxScalerPreprocessor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/MinMaxScalerPreprocessor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/MinMaxScalerPreprocessor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MinMaxScalerPreprocessor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/MinMaxScalerTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/MinMaxScalerTrainer.html
index 6c639d9..d1f0103 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/MinMaxScalerTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/MinMaxScalerTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/MinMaxScalerTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MinMaxScalerTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/class-use/MinMaxScalerPartitionData.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/class-use/MinMaxScalerPartitionData.html
index 1b8e35e..f49309d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/class-use/MinMaxScalerPartitionData.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/class-use/MinMaxScalerPartitionData.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/class-use/MinMaxScalerPartitionData.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.preprocessing.minmaxscaling.MinMaxScalerPartitionData (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/class-use/MinMaxScalerPreprocessor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/class-use/MinMaxScalerPreprocessor.html
index 6a46a98..d2c2da4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/class-use/MinMaxScalerPreprocessor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/class-use/MinMaxScalerPreprocessor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/class-use/MinMaxScalerPreprocessor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.preprocessing.minmaxscaling.MinMaxScalerPreprocessor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/class-use/MinMaxScalerTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/class-use/MinMaxScalerTrainer.html
index e81f6fb..17b8d91 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/class-use/MinMaxScalerTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/class-use/MinMaxScalerTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/class-use/MinMaxScalerTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.preprocessing.minmaxscaling.MinMaxScalerTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/package-frame.html
index 263f247..c6d0b0e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.minmaxscaling (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/package-summary.html
index 81f6b38..aca70c9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.minmaxscaling (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/package-tree.html
index 6b4c806..bba56cf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.minmaxscaling Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/package-use.html
index a385758..fd39d20 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/minmaxscaling/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.preprocessing.minmaxscaling (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/normalization/NormalizationPreprocessor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/normalization/NormalizationPreprocessor.html
index a938c9f..34b0c65 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/normalization/NormalizationPreprocessor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/normalization/NormalizationPreprocessor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/normalization/NormalizationPreprocessor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NormalizationPreprocessor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/normalization/NormalizationTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/normalization/NormalizationTrainer.html
index e6c0817..fc89150 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/normalization/NormalizationTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/normalization/NormalizationTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/normalization/NormalizationTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NormalizationTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/normalization/class-use/NormalizationPreprocessor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/normalization/class-use/NormalizationPreprocessor.html
index 8a18487..d5436b0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/normalization/class-use/NormalizationPreprocessor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/normalization/class-use/NormalizationPreprocessor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/normalization/class-use/NormalizationPreprocessor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.preprocessing.normalization.NormalizationPreprocessor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/normalization/class-use/NormalizationTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/normalization/class-use/NormalizationTrainer.html
index f3eb860..aee0478 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/normalization/class-use/NormalizationTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/normalization/class-use/NormalizationTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/normalization/class-use/NormalizationTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.preprocessing.normalization.NormalizationTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/normalization/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/normalization/package-frame.html
index 4f74b84..b38b0c1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/normalization/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/normalization/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/normalization/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.normalization (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/normalization/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/normalization/package-summary.html
index d0d5f93..e50ec37 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/normalization/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/normalization/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/normalization/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.normalization (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/normalization/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/normalization/package-tree.html
index f2c6b91..4551566 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/normalization/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/normalization/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/normalization/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.normalization Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/normalization/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/normalization/package-use.html
index 5fd5f62..631b28f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/normalization/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/normalization/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/normalization/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.preprocessing.normalization (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/package-frame.html
index dcd59d4..a74fe42 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/package-summary.html
index 776ec11..902fc34 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/package-tree.html
index 89e8bb5..47db952 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/package-use.html
index a43d773..63140c1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.preprocessing (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/StandardScalerData.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/StandardScalerData.html
index 53b4a79..47b767f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/StandardScalerData.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/StandardScalerData.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/StandardScalerData.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>StandardScalerData (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/StandardScalerPreprocessor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/StandardScalerPreprocessor.html
index dfd8d5e..147aac2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/StandardScalerPreprocessor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/StandardScalerPreprocessor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/StandardScalerPreprocessor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>StandardScalerPreprocessor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/StandardScalerTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/StandardScalerTrainer.html
index 96d01f6..a3f5b7b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/StandardScalerTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/StandardScalerTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/StandardScalerTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>StandardScalerTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/class-use/StandardScalerData.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/class-use/StandardScalerData.html
index c46924a..cd7ad3c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/class-use/StandardScalerData.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/class-use/StandardScalerData.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/class-use/StandardScalerData.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.preprocessing.standardscaling.StandardScalerData (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/class-use/StandardScalerPreprocessor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/class-use/StandardScalerPreprocessor.html
index 7789481..fc6c88d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/class-use/StandardScalerPreprocessor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/class-use/StandardScalerPreprocessor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/class-use/StandardScalerPreprocessor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.preprocessing.standardscaling.StandardScalerPreprocessor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/class-use/StandardScalerTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/class-use/StandardScalerTrainer.html
index 9424bad..1bc6654 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/class-use/StandardScalerTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/class-use/StandardScalerTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/class-use/StandardScalerTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.preprocessing.standardscaling.StandardScalerTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/package-frame.html
index f8f8adf..471356b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.standardscaling (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/package-summary.html
index fd8e60e..6c2220f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.standardscaling (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/package-tree.html
index 7ceae96..b5f274e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.preprocessing.standardscaling Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/package-use.html
index 4cfea4a..7b81634 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/preprocessing/standardscaling/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.preprocessing.standardscaling (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/ObjectSubjectPair.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/ObjectSubjectPair.html
index 19a3237..51be115 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/ObjectSubjectPair.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/ObjectSubjectPair.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/recommendation/ObjectSubjectPair.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ObjectSubjectPair (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/ObjectSubjectRatingTriplet.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/ObjectSubjectRatingTriplet.html
index 1608a0e..bbdba2d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/ObjectSubjectRatingTriplet.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/ObjectSubjectRatingTriplet.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/recommendation/ObjectSubjectRatingTriplet.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ObjectSubjectRatingTriplet (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/RecommendationModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/RecommendationModel.html
index e8f4e1f..6b335f0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/RecommendationModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/RecommendationModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/recommendation/RecommendationModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>RecommendationModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/RecommendationTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/RecommendationTrainer.html
index 0c47c08..f09faca 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/RecommendationTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/RecommendationTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/recommendation/RecommendationTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>RecommendationTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/class-use/ObjectSubjectPair.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/class-use/ObjectSubjectPair.html
index 4bdce05..ab09bc8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/class-use/ObjectSubjectPair.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/class-use/ObjectSubjectPair.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/recommendation/class-use/ObjectSubjectPair.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.recommendation.ObjectSubjectPair (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/class-use/ObjectSubjectRatingTriplet.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/class-use/ObjectSubjectRatingTriplet.html
index 77cb6a1..bab3393 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/class-use/ObjectSubjectRatingTriplet.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/class-use/ObjectSubjectRatingTriplet.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/recommendation/class-use/ObjectSubjectRatingTriplet.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.recommendation.ObjectSubjectRatingTriplet (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/class-use/RecommendationModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/class-use/RecommendationModel.html
index 346667d..b042354 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/class-use/RecommendationModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/class-use/RecommendationModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/recommendation/class-use/RecommendationModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.recommendation.RecommendationModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/class-use/RecommendationTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/class-use/RecommendationTrainer.html
index 8ab7d4e..79c949f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/class-use/RecommendationTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/class-use/RecommendationTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/recommendation/class-use/RecommendationTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.recommendation.RecommendationTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/package-frame.html
index 563378f..a862025 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/recommendation/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.recommendation (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/package-summary.html
index 5095dcd..51fe276 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/recommendation/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.recommendation (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/package-tree.html
index a8b7da2..04b1b0b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/recommendation/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.recommendation Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/package-use.html
index 312b015..9ed63c2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/recommendation/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.recommendation (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/MatrixFactorizationGradient.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/MatrixFactorizationGradient.html
index 2bbdc2d..feead3b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/MatrixFactorizationGradient.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/MatrixFactorizationGradient.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/recommendation/util/MatrixFactorizationGradient.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MatrixFactorizationGradient (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/RecommendationBinaryDatasetDataBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/RecommendationBinaryDatasetDataBuilder.html
index 3cfa749..35678ec 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/RecommendationBinaryDatasetDataBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/RecommendationBinaryDatasetDataBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/recommendation/util/RecommendationBinaryDatasetDataBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>RecommendationBinaryDatasetDataBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/RecommendationDatasetData.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/RecommendationDatasetData.html
index d35e708..482d34a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/RecommendationDatasetData.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/RecommendationDatasetData.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/recommendation/util/RecommendationDatasetData.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>RecommendationDatasetData (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/RecommendationDatasetDataBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/RecommendationDatasetDataBuilder.html
index 180a1ec..9c81bb0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/RecommendationDatasetDataBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/RecommendationDatasetDataBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/recommendation/util/RecommendationDatasetDataBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>RecommendationDatasetDataBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/class-use/MatrixFactorizationGradient.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/class-use/MatrixFactorizationGradient.html
index 11a8a18..9a4afb7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/class-use/MatrixFactorizationGradient.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/class-use/MatrixFactorizationGradient.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/recommendation/util/class-use/MatrixFactorizationGradient.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.recommendation.util.MatrixFactorizationGradient (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/class-use/RecommendationBinaryDatasetDataBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/class-use/RecommendationBinaryDatasetDataBuilder.html
index a1c35c9..0d66b29 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/class-use/RecommendationBinaryDatasetDataBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/class-use/RecommendationBinaryDatasetDataBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/recommendation/util/class-use/RecommendationBinaryDatasetDataBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.recommendation.util.RecommendationBinaryDatasetDataBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/class-use/RecommendationDatasetData.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/class-use/RecommendationDatasetData.html
index 98ccd57..e8b4863 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/class-use/RecommendationDatasetData.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/class-use/RecommendationDatasetData.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/recommendation/util/class-use/RecommendationDatasetData.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.recommendation.util.RecommendationDatasetData (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/class-use/RecommendationDatasetDataBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/class-use/RecommendationDatasetDataBuilder.html
index 5e26a85..965140a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/class-use/RecommendationDatasetDataBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/class-use/RecommendationDatasetDataBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/recommendation/util/class-use/RecommendationDatasetDataBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.recommendation.util.RecommendationDatasetDataBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/package-frame.html
index 8e50afa..613b3a6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/recommendation/util/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.recommendation.util (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/package-summary.html
index fd20567..72663f5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/recommendation/util/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.recommendation.util (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/package-tree.html
index 37d7416..44731d9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/recommendation/util/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.recommendation.util Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/package-use.html
index c102af6..bd7a750 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/recommendation/util/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/recommendation/util/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.recommendation.util (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/LinearRegressionLSQRTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/LinearRegressionLSQRTrainer.html
index 2fd52ad..6717903 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/LinearRegressionLSQRTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/LinearRegressionLSQRTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/regressions/linear/LinearRegressionLSQRTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LinearRegressionLSQRTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/LinearRegressionModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/LinearRegressionModel.html
index 4de2f93..131f6be 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/LinearRegressionModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/LinearRegressionModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/regressions/linear/LinearRegressionModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LinearRegressionModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/LinearRegressionSGDTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/LinearRegressionSGDTrainer.html
index 459a423..a4fddb3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/LinearRegressionSGDTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/LinearRegressionSGDTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/regressions/linear/LinearRegressionSGDTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LinearRegressionSGDTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/class-use/LinearRegressionLSQRTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/class-use/LinearRegressionLSQRTrainer.html
index 14b8304..5e67b41 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/class-use/LinearRegressionLSQRTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/class-use/LinearRegressionLSQRTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/regressions/linear/class-use/LinearRegressionLSQRTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.regressions.linear.LinearRegressionLSQRTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/class-use/LinearRegressionModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/class-use/LinearRegressionModel.html
index 08ba87d..a7dfa0b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/class-use/LinearRegressionModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/class-use/LinearRegressionModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/regressions/linear/class-use/LinearRegressionModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.regressions.linear.LinearRegressionModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/class-use/LinearRegressionSGDTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/class-use/LinearRegressionSGDTrainer.html
index 073cf5d..bc73699 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/class-use/LinearRegressionSGDTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/class-use/LinearRegressionSGDTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/regressions/linear/class-use/LinearRegressionSGDTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.regressions.linear.LinearRegressionSGDTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/package-frame.html
index fa3a44d..bc193b6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/regressions/linear/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.regressions.linear (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/package-summary.html
index 3c65f1c..a87f5cd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/regressions/linear/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.regressions.linear (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/package-tree.html
index 0e40e51..fd82e64 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/regressions/linear/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.regressions.linear Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/package-use.html
index d16dc1f..8001682 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/linear/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/regressions/linear/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.regressions.linear (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/logistic/LogisticRegressionModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/logistic/LogisticRegressionModel.html
index e6a4dac..b44f6c7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/logistic/LogisticRegressionModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/logistic/LogisticRegressionModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/regressions/logistic/LogisticRegressionModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LogisticRegressionModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/logistic/LogisticRegressionSGDTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/logistic/LogisticRegressionSGDTrainer.html
index 0a02641..51550d0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/logistic/LogisticRegressionSGDTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/logistic/LogisticRegressionSGDTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/regressions/logistic/LogisticRegressionSGDTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LogisticRegressionSGDTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/logistic/class-use/LogisticRegressionModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/logistic/class-use/LogisticRegressionModel.html
index 99cabea..156c015 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/logistic/class-use/LogisticRegressionModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/logistic/class-use/LogisticRegressionModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/regressions/logistic/class-use/LogisticRegressionModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.regressions.logistic.LogisticRegressionModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/logistic/class-use/LogisticRegressionSGDTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/logistic/class-use/LogisticRegressionSGDTrainer.html
index d2a4218..30c9308 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/logistic/class-use/LogisticRegressionSGDTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/logistic/class-use/LogisticRegressionSGDTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/regressions/logistic/class-use/LogisticRegressionSGDTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.regressions.logistic.LogisticRegressionSGDTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/logistic/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/logistic/package-frame.html
index 496eb1d..30d2079 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/logistic/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/logistic/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/regressions/logistic/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.regressions.logistic (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/logistic/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/logistic/package-summary.html
index 5c1c0e9..e49a126 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/logistic/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/logistic/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/regressions/logistic/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.regressions.logistic (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/logistic/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/logistic/package-tree.html
index 4bf2145..c587437 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/logistic/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/logistic/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/regressions/logistic/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.regressions.logistic Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/logistic/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/logistic/package-use.html
index 53b2b06..2fd3ae2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/logistic/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/logistic/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/regressions/logistic/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.regressions.logistic (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/package-frame.html
index 52e7b5c..646683c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/regressions/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.regressions (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/package-summary.html
index c4384f1..e5270e4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/regressions/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.regressions (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/package-tree.html
index cc414ea..d2d8e3a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/regressions/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.regressions Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/package-use.html
index c4e66ca..7e24d43 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/regressions/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/regressions/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.regressions (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/AbstractCrossValidation.TaskResult.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/AbstractCrossValidation.TaskResult.html
index c781f87..3080594 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/AbstractCrossValidation.TaskResult.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/AbstractCrossValidation.TaskResult.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/cv/AbstractCrossValidation.TaskResult.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>AbstractCrossValidation.TaskResult (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/AbstractCrossValidation.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/AbstractCrossValidation.html
index b83c818..df24cfc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/AbstractCrossValidation.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/AbstractCrossValidation.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/cv/AbstractCrossValidation.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>AbstractCrossValidation (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/CrossValidation.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/CrossValidation.html
index 029a768..bc7cd7b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/CrossValidation.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/CrossValidation.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/cv/CrossValidation.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CrossValidation (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/CrossValidationResult.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/CrossValidationResult.html
index 3892366..4debb24 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/CrossValidationResult.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/CrossValidationResult.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/cv/CrossValidationResult.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CrossValidationResult (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/DebugCrossValidation.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/DebugCrossValidation.html
index ff84633..0f5db5d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/DebugCrossValidation.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/DebugCrossValidation.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/cv/DebugCrossValidation.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DebugCrossValidation (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/class-use/AbstractCrossValidation.TaskResult.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/class-use/AbstractCrossValidation.TaskResult.html
index b89cbd3..0022b94 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/class-use/AbstractCrossValidation.TaskResult.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/class-use/AbstractCrossValidation.TaskResult.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/cv/class-use/AbstractCrossValidation.TaskResult.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.cv.AbstractCrossValidation.TaskResult (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/class-use/AbstractCrossValidation.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/class-use/AbstractCrossValidation.html
index 4a34ab3..9e1c52d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/class-use/AbstractCrossValidation.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/class-use/AbstractCrossValidation.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/cv/class-use/AbstractCrossValidation.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.cv.AbstractCrossValidation (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/class-use/CrossValidation.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/class-use/CrossValidation.html
index d08e5a3..98064f5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/class-use/CrossValidation.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/class-use/CrossValidation.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/cv/class-use/CrossValidation.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.cv.CrossValidation (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/class-use/CrossValidationResult.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/class-use/CrossValidationResult.html
index 7514288..dcfb21f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/class-use/CrossValidationResult.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/class-use/CrossValidationResult.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/cv/class-use/CrossValidationResult.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.cv.CrossValidationResult (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/class-use/DebugCrossValidation.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/class-use/DebugCrossValidation.html
index 0f641bb..b5d2792 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/class-use/DebugCrossValidation.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/class-use/DebugCrossValidation.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/cv/class-use/DebugCrossValidation.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.cv.DebugCrossValidation (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/package-frame.html
index c38fa31..bd5f12f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/cv/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.cv (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/package-summary.html
index 2c682e3..c31e3ab 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/cv/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.cv (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/package-tree.html
index bced0aa..7e8108b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/cv/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.cv Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/package-use.html
index 4382a4e..d6b5225 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/cv/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/cv/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.selection.cv (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/package-frame.html
index 9406b9a..66b61fb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/package-summary.html
index 2c8c75f..8b801bd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/package-tree.html
index a566796..e88d0a7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/package-use.html
index 2347d73..893d43c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.selection (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/BruteForceStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/BruteForceStrategy.html
index 8e7e2d8..f0bbe36 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/BruteForceStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/BruteForceStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/paramgrid/BruteForceStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BruteForceStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/EvolutionOptimizationStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/EvolutionOptimizationStrategy.html
index 0e414b2..a16855d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/EvolutionOptimizationStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/EvolutionOptimizationStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/paramgrid/EvolutionOptimizationStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>EvolutionOptimizationStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/HyperParameterTuningStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/HyperParameterTuningStrategy.html
index 21dba69..814d470 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/HyperParameterTuningStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/HyperParameterTuningStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/paramgrid/HyperParameterTuningStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>HyperParameterTuningStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/ParamGrid.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/ParamGrid.html
index 0f67f98..b397a59 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/ParamGrid.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/ParamGrid.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/paramgrid/ParamGrid.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ParamGrid (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/ParameterSetGenerator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/ParameterSetGenerator.html
index a7729d1..9ff9ef6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/ParameterSetGenerator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/ParameterSetGenerator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/paramgrid/ParameterSetGenerator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ParameterSetGenerator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/RandomStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/RandomStrategy.html
index e6e3128..5536115 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/RandomStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/RandomStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/paramgrid/RandomStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>RandomStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/class-use/BruteForceStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/class-use/BruteForceStrategy.html
index fb56c0c..09ba53a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/class-use/BruteForceStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/class-use/BruteForceStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/paramgrid/class-use/BruteForceStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.paramgrid.BruteForceStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/class-use/EvolutionOptimizationStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/class-use/EvolutionOptimizationStrategy.html
index fd1b3bb..4d995bd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/class-use/EvolutionOptimizationStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/class-use/EvolutionOptimizationStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/paramgrid/class-use/EvolutionOptimizationStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.paramgrid.EvolutionOptimizationStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/class-use/HyperParameterTuningStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/class-use/HyperParameterTuningStrategy.html
index 4fed082..8ab5f7b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/class-use/HyperParameterTuningStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/class-use/HyperParameterTuningStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/paramgrid/class-use/HyperParameterTuningStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.paramgrid.HyperParameterTuningStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/class-use/ParamGrid.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/class-use/ParamGrid.html
index 8f090f7..f456284 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/class-use/ParamGrid.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/class-use/ParamGrid.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/paramgrid/class-use/ParamGrid.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.paramgrid.ParamGrid (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/class-use/ParameterSetGenerator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/class-use/ParameterSetGenerator.html
index eb3a452..b886c23 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/class-use/ParameterSetGenerator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/class-use/ParameterSetGenerator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/paramgrid/class-use/ParameterSetGenerator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.paramgrid.ParameterSetGenerator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/class-use/RandomStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/class-use/RandomStrategy.html
index 60e236a..d71ff99 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/class-use/RandomStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/class-use/RandomStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/paramgrid/class-use/RandomStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.paramgrid.RandomStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/package-frame.html
index 7f36984..40908de 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/paramgrid/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.paramgrid (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/package-summary.html
index 087b169..27aa37a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/paramgrid/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.paramgrid (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/package-tree.html
index 9fcbf67..92b2872 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/paramgrid/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.paramgrid Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/package-use.html
index 851b5b2..faaf494 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/paramgrid/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/paramgrid/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.selection.paramgrid (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/LabelPair.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/LabelPair.html
index 897b783..211d244 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/LabelPair.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/LabelPair.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/LabelPair.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LabelPair (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/class-use/LabelPair.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/class-use/LabelPair.html
index 30c3e33..382d34b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/class-use/LabelPair.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/class-use/LabelPair.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/class-use/LabelPair.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.scoring.LabelPair (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/CacheBasedLabelPairCursor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/CacheBasedLabelPairCursor.html
index a0ad44b..6099c79 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/CacheBasedLabelPairCursor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/CacheBasedLabelPairCursor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/cursor/CacheBasedLabelPairCursor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheBasedLabelPairCursor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/LabelPairCursor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/LabelPairCursor.html
index a6328d6..2c333c6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/LabelPairCursor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/LabelPairCursor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/cursor/LabelPairCursor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LabelPairCursor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/LocalLabelPairCursor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/LocalLabelPairCursor.html
index 28adb7c..4f920c6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/LocalLabelPairCursor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/LocalLabelPairCursor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/cursor/LocalLabelPairCursor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LocalLabelPairCursor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/class-use/CacheBasedLabelPairCursor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/class-use/CacheBasedLabelPairCursor.html
index aa3a8e6..f8e13a3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/class-use/CacheBasedLabelPairCursor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/class-use/CacheBasedLabelPairCursor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/cursor/class-use/CacheBasedLabelPairCursor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.scoring.cursor.CacheBasedLabelPairCursor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/class-use/LabelPairCursor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/class-use/LabelPairCursor.html
index 1b9d173..5fb021d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/class-use/LabelPairCursor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/class-use/LabelPairCursor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/cursor/class-use/LabelPairCursor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.selection.scoring.cursor.LabelPairCursor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/class-use/LocalLabelPairCursor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/class-use/LocalLabelPairCursor.html
index de04c24..61fc252 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/class-use/LocalLabelPairCursor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/class-use/LocalLabelPairCursor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/cursor/class-use/LocalLabelPairCursor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.scoring.cursor.LocalLabelPairCursor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/package-frame.html
index a047450..262f0a1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/cursor/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.scoring.cursor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/package-summary.html
index c3b302c..9a99a45 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/cursor/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.scoring.cursor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/package-tree.html
index 56c5153..9b0fd39 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/cursor/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.scoring.cursor Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/package-use.html
index 794e066..a5d7fed 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/cursor/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/cursor/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.selection.scoring.cursor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/EvaluationResult.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/EvaluationResult.html
index e409513..e7d1aa7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/EvaluationResult.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/EvaluationResult.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/EvaluationResult.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>EvaluationResult (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/Evaluator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/Evaluator.html
index 547264d..71c7e9f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/Evaluator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/Evaluator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/Evaluator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Evaluator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/BinaryClassificationPointwiseMetricStatsAggregator.WithCustomLabelsAggregator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/BinaryClassificationPointwiseMetricStatsAggregator.WithCustomLabelsAggregator.html
index 1f6505c..1a56a36 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/BinaryClassificationPointwiseMetricStatsAggregator.WithCustomLabelsAggregator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/BinaryClassificationPointwiseMetricStatsAggregator.WithCustomLabelsAggregator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/BinaryClassificationPointwiseMetricStatsAggregator.WithCustomLabelsAggregator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BinaryClassificationPointwiseMetricStatsAggregator.WithCustomLabelsAggregator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/BinaryClassificationPointwiseMetricStatsAggregator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/BinaryClassificationPointwiseMetricStatsAggregator.html
index 16ae6fc..13fd444 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/BinaryClassificationPointwiseMetricStatsAggregator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/BinaryClassificationPointwiseMetricStatsAggregator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/BinaryClassificationPointwiseMetricStatsAggregator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BinaryClassificationPointwiseMetricStatsAggregator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/ClassificationMetricsAggregator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/ClassificationMetricsAggregator.html
index 8ffb00b..8c7adce 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/ClassificationMetricsAggregator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/ClassificationMetricsAggregator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/ClassificationMetricsAggregator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClassificationMetricsAggregator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/MetricStatsAggregator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/MetricStatsAggregator.html
index 929a441..c8296f5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/MetricStatsAggregator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/MetricStatsAggregator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/MetricStatsAggregator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MetricStatsAggregator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/RegressionMetricStatsAggregator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/RegressionMetricStatsAggregator.html
index afd6b6c..1210110 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/RegressionMetricStatsAggregator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/RegressionMetricStatsAggregator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/RegressionMetricStatsAggregator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>RegressionMetricStatsAggregator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/class-use/BinaryClassificationPointwiseMetricStatsAggregator.WithCustomLabelsAggregator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/class-use/BinaryClassificationPointwiseMetricStatsAggregator.WithCustomLabelsAggregator.html
index c5d3d13..fd2a21e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/class-use/BinaryClassificationPointwiseMetricStatsAggregator.WithCustomLabelsAggregator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/class-use/BinaryClassificationPointwiseMetricStatsAggregator.WithCustomLabelsAggregator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/class-use/BinaryClassificationPointwiseMetricStatsAggregator.WithCustomLabelsAggregator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.scoring.evaluator.aggregator.BinaryClassificationPointwiseMetricStatsAggregator.WithCustomLabelsAggregator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/class-use/BinaryClassificationPointwiseMetricStatsAggregator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/class-use/BinaryClassificationPointwiseMetricStatsAggregator.html
index d2105d1..7291562 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/class-use/BinaryClassificationPointwiseMetricStatsAggregator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/class-use/BinaryClassificationPointwiseMetricStatsAggregator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/class-use/BinaryClassificationPointwiseMetricStatsAggregator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.scoring.evaluator.aggregator.BinaryClassificationPointwiseMetricStatsAggregator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/class-use/ClassificationMetricsAggregator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/class-use/ClassificationMetricsAggregator.html
index 4ea9549..4eeeb4c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/class-use/ClassificationMetricsAggregator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/class-use/ClassificationMetricsAggregator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/class-use/ClassificationMetricsAggregator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.scoring.evaluator.aggregator.ClassificationMetricsAggregator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/class-use/MetricStatsAggregator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/class-use/MetricStatsAggregator.html
index f25d45d..fe40e45 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/class-use/MetricStatsAggregator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/class-use/MetricStatsAggregator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/class-use/MetricStatsAggregator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.selection.scoring.evaluator.aggregator.MetricStatsAggregator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/class-use/RegressionMetricStatsAggregator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/class-use/RegressionMetricStatsAggregator.html
index bb071d4ee..cb927bc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/class-use/RegressionMetricStatsAggregator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/class-use/RegressionMetricStatsAggregator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/class-use/RegressionMetricStatsAggregator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.scoring.evaluator.aggregator.RegressionMetricStatsAggregator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/package-frame.html
index 5eead2d..54a4c00 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.scoring.evaluator.aggregator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/package-summary.html
index 6f16efd..655fd0c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.scoring.evaluator.aggregator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/package-tree.html
index 59d9789..f5ac4cc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.scoring.evaluator.aggregator Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/package-use.html
index 84b0092..28a2deb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/aggregator/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.selection.scoring.evaluator.aggregator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/class-use/EvaluationResult.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/class-use/EvaluationResult.html
index 887481a..0bfeaaa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/class-use/EvaluationResult.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/class-use/EvaluationResult.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/class-use/EvaluationResult.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.scoring.evaluator.EvaluationResult (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/class-use/Evaluator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/class-use/Evaluator.html
index 073b0d5..3ee9b67 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/class-use/Evaluator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/class-use/Evaluator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/class-use/Evaluator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.scoring.evaluator.Evaluator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/BinaryClassificationEvaluationContext.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/BinaryClassificationEvaluationContext.html
index e9a46e9..5e701b5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/BinaryClassificationEvaluationContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/BinaryClassificationEvaluationContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/BinaryClassificationEvaluationContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BinaryClassificationEvaluationContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/EmptyContext.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/EmptyContext.html
index 0fb45f8..2e65edf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/EmptyContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/EmptyContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/EmptyContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>EmptyContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/EvaluationContext.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/EvaluationContext.html
index 13b588a..42fa044 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/EvaluationContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/EvaluationContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/EvaluationContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>EvaluationContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/class-use/BinaryClassificationEvaluationContext.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/class-use/BinaryClassificationEvaluationContext.html
index 1053ec7..118f373 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/class-use/BinaryClassificationEvaluationContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/class-use/BinaryClassificationEvaluationContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/class-use/BinaryClassificationEvaluationContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.scoring.evaluator.context.BinaryClassificationEvaluationContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/class-use/EmptyContext.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/class-use/EmptyContext.html
index 3359d9f..bf0fe41 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/class-use/EmptyContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/class-use/EmptyContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/class-use/EmptyContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.scoring.evaluator.context.EmptyContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/class-use/EvaluationContext.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/class-use/EvaluationContext.html
index 8597a4e..0e153e9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/class-use/EvaluationContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/class-use/EvaluationContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/class-use/EvaluationContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.selection.scoring.evaluator.context.EvaluationContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/package-frame.html
index 143121f..6a80279 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.scoring.evaluator.context (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/package-summary.html
index c149004..ebbb72e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.scoring.evaluator.context (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/package-tree.html
index 118f33c..2418d41 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.scoring.evaluator.context Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/package-use.html
index 80100fb..24daf67 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/context/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.selection.scoring.evaluator.context (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/package-frame.html
index e011890..c204fa4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.scoring.evaluator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/package-summary.html
index 8556f28..fcb4ea1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.scoring.evaluator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/package-tree.html
index e5b5f89..9adcdad 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.scoring.evaluator Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/package-use.html
index d2d91d0..853e252 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/evaluator/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.selection.scoring.evaluator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/Metric.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/Metric.html
index 95621db..b82fdcf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/Metric.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/Metric.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/Metric.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Metric (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/MetricName.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/MetricName.html
index 3a04781..c610fba 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/MetricName.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/MetricName.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/MetricName.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MetricName (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/class-use/Metric.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/class-use/Metric.html
index c755809..a75d447 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/class-use/Metric.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/class-use/Metric.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/class-use/Metric.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.selection.scoring.metric.Metric (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/class-use/MetricName.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/class-use/MetricName.html
index 35acc9d..81756c5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/class-use/MetricName.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/class-use/MetricName.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/class-use/MetricName.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.scoring.metric.MetricName (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/Accuracy.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/Accuracy.html
index 7776ec7..d69270b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/Accuracy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/Accuracy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/Accuracy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Accuracy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/BalancedAccuracy.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/BalancedAccuracy.html
index dc3de55..94f10bf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/BalancedAccuracy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/BalancedAccuracy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/BalancedAccuracy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BalancedAccuracy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/BinaryClassificationMetric.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/BinaryClassificationMetric.html
index 362341e..ad25210 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/BinaryClassificationMetric.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/BinaryClassificationMetric.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/BinaryClassificationMetric.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BinaryClassificationMetric (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/FMeasure.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/FMeasure.html
index 999500b..751b66e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/FMeasure.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/FMeasure.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/FMeasure.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>FMeasure (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/FallOut.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/FallOut.html
index eaddae6..f512588 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/FallOut.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/FallOut.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/FallOut.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>FallOut (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/FalseNegativeAbsoluteValue.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/FalseNegativeAbsoluteValue.html
index 5633b9b..39e7eef 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/FalseNegativeAbsoluteValue.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/FalseNegativeAbsoluteValue.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/FalseNegativeAbsoluteValue.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>FalseNegativeAbsoluteValue (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/FalsePositiveAbsoluteValue.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/FalsePositiveAbsoluteValue.html
index cd59441..cec6899 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/FalsePositiveAbsoluteValue.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/FalsePositiveAbsoluteValue.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/FalsePositiveAbsoluteValue.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>FalsePositiveAbsoluteValue (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/Fdr.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/Fdr.html
index 16ddac8..5f3db2a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/Fdr.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/Fdr.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/Fdr.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Fdr (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/MissRate.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/MissRate.html
index 5683b83..75486f2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/MissRate.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/MissRate.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/MissRate.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MissRate (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/Npv.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/Npv.html
index ee27299..2f9bb00 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/Npv.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/Npv.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/Npv.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Npv (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/Precision.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/Precision.html
index 8b8435a..4e8a629 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/Precision.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/Precision.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/Precision.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Precision (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/Recall.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/Recall.html
index bcf6c05..8429f06 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/Recall.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/Recall.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/Recall.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Recall (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/Specificity.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/Specificity.html
index a183d97..160ad88 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/Specificity.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/Specificity.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/Specificity.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Specificity (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/TrueNegativeAbsoluteValue.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/TrueNegativeAbsoluteValue.html
index 103dcb8..9a14e08 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/TrueNegativeAbsoluteValue.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/TrueNegativeAbsoluteValue.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/TrueNegativeAbsoluteValue.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TrueNegativeAbsoluteValue (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/TruePositiveAbsoluteValue.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/TruePositiveAbsoluteValue.html
index bf44a22..eb4c448 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/TruePositiveAbsoluteValue.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/TruePositiveAbsoluteValue.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/TruePositiveAbsoluteValue.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TruePositiveAbsoluteValue (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/Accuracy.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/Accuracy.html
index c52b2b0..7221e0e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/Accuracy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/Accuracy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/Accuracy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.scoring.metric.classification.Accuracy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/BalancedAccuracy.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/BalancedAccuracy.html
index 10e32f7..f84edb1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/BalancedAccuracy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/BalancedAccuracy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/BalancedAccuracy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.scoring.metric.classification.BalancedAccuracy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/BinaryClassificationMetric.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/BinaryClassificationMetric.html
index c8e5690..e8cd245 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/BinaryClassificationMetric.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/BinaryClassificationMetric.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/BinaryClassificationMetric.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.scoring.metric.classification.BinaryClassificationMetric (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/FMeasure.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/FMeasure.html
index 9c479fe..7fd843d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/FMeasure.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/FMeasure.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/FMeasure.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.scoring.metric.classification.FMeasure (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/FallOut.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/FallOut.html
index 3d93329..6ae663a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/FallOut.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/FallOut.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/FallOut.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.scoring.metric.classification.FallOut (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/FalseNegativeAbsoluteValue.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/FalseNegativeAbsoluteValue.html
index 5aa2af5..c1cb8d5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/FalseNegativeAbsoluteValue.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/FalseNegativeAbsoluteValue.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/FalseNegativeAbsoluteValue.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.scoring.metric.classification.FalseNegativeAbsoluteValue (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/FalsePositiveAbsoluteValue.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/FalsePositiveAbsoluteValue.html
index f6f6e7c..4887b24 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/FalsePositiveAbsoluteValue.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/FalsePositiveAbsoluteValue.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/FalsePositiveAbsoluteValue.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.scoring.metric.classification.FalsePositiveAbsoluteValue (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/Fdr.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/Fdr.html
index 49733c5..bfb7c78 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/Fdr.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/Fdr.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/Fdr.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.scoring.metric.classification.Fdr (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/MissRate.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/MissRate.html
index f0beb70..0ff9d0d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/MissRate.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/MissRate.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/MissRate.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.scoring.metric.classification.MissRate (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/Npv.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/Npv.html
index 8faa2c4..93ef56e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/Npv.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/Npv.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/Npv.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.scoring.metric.classification.Npv (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/Precision.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/Precision.html
index 7e79fd6..cec665e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/Precision.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/Precision.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/Precision.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.scoring.metric.classification.Precision (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/Recall.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/Recall.html
index c435e71..905a645 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/Recall.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/Recall.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/Recall.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.scoring.metric.classification.Recall (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/Specificity.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/Specificity.html
index 9325d37..caeb3c5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/Specificity.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/Specificity.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/Specificity.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.scoring.metric.classification.Specificity (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/TrueNegativeAbsoluteValue.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/TrueNegativeAbsoluteValue.html
index f617a79..6a5066f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/TrueNegativeAbsoluteValue.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/TrueNegativeAbsoluteValue.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/TrueNegativeAbsoluteValue.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.scoring.metric.classification.TrueNegativeAbsoluteValue (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/TruePositiveAbsoluteValue.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/TruePositiveAbsoluteValue.html
index 27e374b..9ac66a2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/TruePositiveAbsoluteValue.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/TruePositiveAbsoluteValue.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/class-use/TruePositiveAbsoluteValue.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.scoring.metric.classification.TruePositiveAbsoluteValue (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/package-frame.html
index bd3db7f..956f98c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.scoring.metric.classification (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/package-summary.html
index d931eff..22c4092 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.scoring.metric.classification (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/package-tree.html
index 8ceadf2..ec767fe 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.scoring.metric.classification Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/package-use.html
index 386d157..5a0951c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/classification/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.selection.scoring.metric.classification (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/package-frame.html
index 17a585d..5e55e9b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.scoring.metric (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/package-summary.html
index 369c9fe..42b4345 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.scoring.metric (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/package-tree.html
index 59433c3..09a34b4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.scoring.metric Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/package-use.html
index 7169b52..261a6c1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.selection.scoring.metric (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/Mae.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/Mae.html
index 1450196..123b654 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/Mae.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/Mae.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/Mae.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Mae (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/Mse.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/Mse.html
index 7982ce1..5ff69f5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/Mse.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/Mse.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/Mse.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Mse (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/R2.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/R2.html
index db09a6a..b795422 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/R2.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/R2.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/R2.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>R2 (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/Rmse.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/Rmse.html
index 3daaa07..0c6e753 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/Rmse.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/Rmse.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/Rmse.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Rmse (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/Rss.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/Rss.html
index 7bb90e4..3b68c00 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/Rss.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/Rss.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/Rss.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Rss (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/class-use/Mae.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/class-use/Mae.html
index bc602c3..5a7e2c9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/class-use/Mae.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/class-use/Mae.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/class-use/Mae.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.scoring.metric.regression.Mae (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/class-use/Mse.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/class-use/Mse.html
index 0cdc4ef..e65e125 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/class-use/Mse.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/class-use/Mse.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/class-use/Mse.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.scoring.metric.regression.Mse (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/class-use/R2.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/class-use/R2.html
index d7a5bc6..6b5f814 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/class-use/R2.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/class-use/R2.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/class-use/R2.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.scoring.metric.regression.R2 (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/class-use/Rmse.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/class-use/Rmse.html
index 0c791c9..f473e82 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/class-use/Rmse.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/class-use/Rmse.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/class-use/Rmse.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.scoring.metric.regression.Rmse (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/class-use/Rss.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/class-use/Rss.html
index 7cd22b3..e2e91c8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/class-use/Rss.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/class-use/Rss.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/class-use/Rss.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.scoring.metric.regression.Rss (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/package-frame.html
index 183faf2..1a7c284 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.scoring.metric.regression (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/package-summary.html
index bbbc66a..620fcfe 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.scoring.metric.regression (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/package-tree.html
index 8c61e80..6f470e0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.scoring.metric.regression Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/package-use.html
index dccb07c..0c7cc8a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/metric/regression/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.selection.scoring.metric.regression (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/package-frame.html
index b0b8539..06d602e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.scoring (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/package-summary.html
index 6cca3d7..d401a58 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.scoring (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/package-tree.html
index c54ca10..6d90105 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.scoring Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/package-use.html
index 1509063..f3a3d99 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/scoring/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/scoring/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.selection.scoring (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/TrainTestDatasetSplitter.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/TrainTestDatasetSplitter.html
index 578b616..ffc2bb2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/TrainTestDatasetSplitter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/TrainTestDatasetSplitter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/split/TrainTestDatasetSplitter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TrainTestDatasetSplitter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/TrainTestSplit.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/TrainTestSplit.html
index ca977f5..acb7d72 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/TrainTestSplit.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/TrainTestSplit.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/split/TrainTestSplit.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TrainTestSplit (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/class-use/TrainTestDatasetSplitter.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/class-use/TrainTestDatasetSplitter.html
index b3e6b8a..a6aa890 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/class-use/TrainTestDatasetSplitter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/class-use/TrainTestDatasetSplitter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/split/class-use/TrainTestDatasetSplitter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.split.TrainTestDatasetSplitter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/class-use/TrainTestSplit.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/class-use/TrainTestSplit.html
index 2b6c423..f0cac89 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/class-use/TrainTestSplit.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/class-use/TrainTestSplit.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/split/class-use/TrainTestSplit.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.split.TrainTestSplit (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/mapper/SHA256UniformMapper.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/mapper/SHA256UniformMapper.html
index da5ffd75..29802cf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/mapper/SHA256UniformMapper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/mapper/SHA256UniformMapper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/split/mapper/SHA256UniformMapper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SHA256UniformMapper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/mapper/UniformMapper.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/mapper/UniformMapper.html
index 3f072ed..bc64fc1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/mapper/UniformMapper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/mapper/UniformMapper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/split/mapper/UniformMapper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>UniformMapper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/mapper/class-use/SHA256UniformMapper.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/mapper/class-use/SHA256UniformMapper.html
index 84e7919..fe3306f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/mapper/class-use/SHA256UniformMapper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/mapper/class-use/SHA256UniformMapper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/split/mapper/class-use/SHA256UniformMapper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.selection.split.mapper.SHA256UniformMapper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/mapper/class-use/UniformMapper.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/mapper/class-use/UniformMapper.html
index 8a713c8..0cdd4df 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/mapper/class-use/UniformMapper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/mapper/class-use/UniformMapper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/split/mapper/class-use/UniformMapper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.selection.split.mapper.UniformMapper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/mapper/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/mapper/package-frame.html
index f26d30c..bf6d20c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/mapper/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/mapper/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/split/mapper/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.split.mapper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/mapper/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/mapper/package-summary.html
index 58fc162..cd4c888 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/mapper/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/mapper/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/split/mapper/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.split.mapper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/mapper/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/mapper/package-tree.html
index 01e3acd..014388e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/mapper/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/mapper/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/split/mapper/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.split.mapper Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/mapper/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/mapper/package-use.html
index 3c82970..d683efb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/mapper/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/mapper/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/split/mapper/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.selection.split.mapper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/package-frame.html
index d80b43b..976c961 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/split/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.split (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/package-summary.html
index 7a00678..b65f14b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/split/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.split (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/package-tree.html
index 6bcf379..e29c2e2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/split/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.selection.split Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/package-use.html
index 4526984..a7670e4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/selection/split/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/selection/split/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.selection.split (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/SparkModelParser.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/SparkModelParser.html
index 5248d6a..e84d2ce 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/SparkModelParser.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/SparkModelParser.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/sparkmodelparser/SparkModelParser.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SparkModelParser (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/SupportedSparkModels.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/SupportedSparkModels.html
index c7e2073..95bb338 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/SupportedSparkModels.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/SupportedSparkModels.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/sparkmodelparser/SupportedSparkModels.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SupportedSparkModels (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/UnsupportedSparkModelException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/UnsupportedSparkModelException.html
index 3e9fbfe..e6b56a3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/UnsupportedSparkModelException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/UnsupportedSparkModelException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/sparkmodelparser/UnsupportedSparkModelException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>UnsupportedSparkModelException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/class-use/SparkModelParser.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/class-use/SparkModelParser.html
index 2d931ee..079a8cd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/class-use/SparkModelParser.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/class-use/SparkModelParser.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/sparkmodelparser/class-use/SparkModelParser.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.sparkmodelparser.SparkModelParser (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/class-use/SupportedSparkModels.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/class-use/SupportedSparkModels.html
index 8726029..94249ef 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/class-use/SupportedSparkModels.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/class-use/SupportedSparkModels.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/sparkmodelparser/class-use/SupportedSparkModels.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.sparkmodelparser.SupportedSparkModels (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/class-use/UnsupportedSparkModelException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/class-use/UnsupportedSparkModelException.html
index d28fd74..9571063 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/class-use/UnsupportedSparkModelException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/class-use/UnsupportedSparkModelException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/sparkmodelparser/class-use/UnsupportedSparkModelException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.sparkmodelparser.UnsupportedSparkModelException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/package-frame.html
index a652bae..12df3cd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/sparkmodelparser/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.sparkmodelparser (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/package-summary.html
index 406eede..4b91974 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/sparkmodelparser/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.sparkmodelparser (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/package-tree.html
index 4e4ecb0..8f39d92 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/sparkmodelparser/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.sparkmodelparser Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/package-use.html
index 6f3e8ad..8655beb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/sparkmodelparser/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/sparkmodelparser/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.sparkmodelparser (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/sql/SQLFunctions.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/sql/SQLFunctions.html
index dc14f9d..f841075 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/sql/SQLFunctions.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/sql/SQLFunctions.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/sql/SQLFunctions.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SQLFunctions (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/sql/SqlDatasetBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/sql/SqlDatasetBuilder.html
index 089dfc0..d126945 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/sql/SqlDatasetBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/sql/SqlDatasetBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/sql/SqlDatasetBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SqlDatasetBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/sql/class-use/SQLFunctions.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/sql/class-use/SQLFunctions.html
index 0ff64b4..6f28ec4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/sql/class-use/SQLFunctions.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/sql/class-use/SQLFunctions.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/sql/class-use/SQLFunctions.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.sql.SQLFunctions (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/sql/class-use/SqlDatasetBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/sql/class-use/SqlDatasetBuilder.html
index 2148e10..2e31b00 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/sql/class-use/SqlDatasetBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/sql/class-use/SqlDatasetBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/sql/class-use/SqlDatasetBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.sql.SqlDatasetBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/sql/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/sql/package-frame.html
index 362eed7..fc664a0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/sql/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/sql/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/sql/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.sql (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/sql/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/sql/package-summary.html
index d0f8df5..43dfb9b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/sql/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/sql/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/sql/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.sql (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/sql/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/sql/package-tree.html
index 09bff7f..32d48e1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/sql/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/sql/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/sql/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.sql Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/sql/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/sql/package-use.html
index de617d0..fcf4fd6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/sql/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/sql/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/sql/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.sql (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/Dataset.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/Dataset.html
index 966d803..382971d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/Dataset.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/Dataset.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/structures/Dataset.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Dataset (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/DatasetRow.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/DatasetRow.html
index 1745ea3..697aaf3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/DatasetRow.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/DatasetRow.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/structures/DatasetRow.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DatasetRow (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/FeatureMetadata.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/FeatureMetadata.html
index e7b4259..e50b019 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/FeatureMetadata.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/FeatureMetadata.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/structures/FeatureMetadata.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>FeatureMetadata (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/LabeledVector.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/LabeledVector.html
index 52960b3..01e4b46 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/LabeledVector.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/LabeledVector.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/structures/LabeledVector.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LabeledVector (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/LabeledVectorSet.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/LabeledVectorSet.html
index 8b6a0aa..0d9b31c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/LabeledVectorSet.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/LabeledVectorSet.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/structures/LabeledVectorSet.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LabeledVectorSet (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/LabeledVectorSetTestTrainPair.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/LabeledVectorSetTestTrainPair.html
index c04c018..5280352 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/LabeledVectorSetTestTrainPair.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/LabeledVectorSetTestTrainPair.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/structures/LabeledVectorSetTestTrainPair.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LabeledVectorSetTestTrainPair (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/class-use/Dataset.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/class-use/Dataset.html
index a825e38..da577f9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/class-use/Dataset.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/class-use/Dataset.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/structures/class-use/Dataset.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.structures.Dataset (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/class-use/DatasetRow.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/class-use/DatasetRow.html
index 966b5b3..e67fa1e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/class-use/DatasetRow.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/class-use/DatasetRow.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/structures/class-use/DatasetRow.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.structures.DatasetRow (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/class-use/FeatureMetadata.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/class-use/FeatureMetadata.html
index 2e3d07b..386f4db 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/class-use/FeatureMetadata.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/class-use/FeatureMetadata.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/structures/class-use/FeatureMetadata.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.structures.FeatureMetadata (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/class-use/LabeledVector.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/class-use/LabeledVector.html
index 04b85cf..86a4bb7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/class-use/LabeledVector.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/class-use/LabeledVector.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/structures/class-use/LabeledVector.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.structures.LabeledVector (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/class-use/LabeledVectorSet.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/class-use/LabeledVectorSet.html
index 74013e9..7e14da9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/class-use/LabeledVectorSet.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/class-use/LabeledVectorSet.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/structures/class-use/LabeledVectorSet.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.structures.LabeledVectorSet (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/class-use/LabeledVectorSetTestTrainPair.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/class-use/LabeledVectorSetTestTrainPair.html
index ec5bbdd..f142a6c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/class-use/LabeledVectorSetTestTrainPair.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/class-use/LabeledVectorSetTestTrainPair.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/structures/class-use/LabeledVectorSetTestTrainPair.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.structures.LabeledVectorSetTestTrainPair (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/package-frame.html
index 64249c3..d9977ff 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/structures/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.structures (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/package-summary.html
index 7922e18..db39669 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/structures/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.structures (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/package-tree.html
index 2379d14..bd8605c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/structures/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.structures Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/package-use.html
index 05887bf..6f2fc08 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/structures/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.structures (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/LabelPartitionDataBuilderOnHeap.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/LabelPartitionDataBuilderOnHeap.html
index 02a9241..f5344f6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/LabelPartitionDataBuilderOnHeap.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/LabelPartitionDataBuilderOnHeap.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/structures/partition/LabelPartitionDataBuilderOnHeap.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LabelPartitionDataBuilderOnHeap (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/LabelPartitionDataOnHeap.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/LabelPartitionDataOnHeap.html
index 92d54c9..47b4933 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/LabelPartitionDataOnHeap.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/LabelPartitionDataOnHeap.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/structures/partition/LabelPartitionDataOnHeap.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LabelPartitionDataOnHeap (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/LabeledDatasetPartitionDataBuilderOnHeap.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/LabeledDatasetPartitionDataBuilderOnHeap.html
index 55198ce..781a8b2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/LabeledDatasetPartitionDataBuilderOnHeap.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/LabeledDatasetPartitionDataBuilderOnHeap.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/structures/partition/LabeledDatasetPartitionDataBuilderOnHeap.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LabeledDatasetPartitionDataBuilderOnHeap (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/class-use/LabelPartitionDataBuilderOnHeap.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/class-use/LabelPartitionDataBuilderOnHeap.html
index ba95734..ce43d4e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/class-use/LabelPartitionDataBuilderOnHeap.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/class-use/LabelPartitionDataBuilderOnHeap.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/structures/partition/class-use/LabelPartitionDataBuilderOnHeap.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.structures.partition.LabelPartitionDataBuilderOnHeap (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/class-use/LabelPartitionDataOnHeap.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/class-use/LabelPartitionDataOnHeap.html
index 2b0e336..e505262 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/class-use/LabelPartitionDataOnHeap.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/class-use/LabelPartitionDataOnHeap.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/structures/partition/class-use/LabelPartitionDataOnHeap.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.structures.partition.LabelPartitionDataOnHeap (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/class-use/LabeledDatasetPartitionDataBuilderOnHeap.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/class-use/LabeledDatasetPartitionDataBuilderOnHeap.html
index 27f682b..ef7b462 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/class-use/LabeledDatasetPartitionDataBuilderOnHeap.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/class-use/LabeledDatasetPartitionDataBuilderOnHeap.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/structures/partition/class-use/LabeledDatasetPartitionDataBuilderOnHeap.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.structures.partition.LabeledDatasetPartitionDataBuilderOnHeap (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/package-frame.html
index 9f04e6e..565d86e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/structures/partition/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.structures.partition (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/package-summary.html
index e3d5de2..6248226 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/structures/partition/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.structures.partition (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/package-tree.html
index 3507a9e..c1bcc11 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/structures/partition/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.structures.partition Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/package-use.html
index e30f40c..e92bbf1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/partition/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/structures/partition/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.structures.partition (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/preprocessing/LabeledDatasetLoader.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/preprocessing/LabeledDatasetLoader.html
index dcdc366..5517d8e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/preprocessing/LabeledDatasetLoader.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/preprocessing/LabeledDatasetLoader.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/structures/preprocessing/LabeledDatasetLoader.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LabeledDatasetLoader (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/preprocessing/class-use/LabeledDatasetLoader.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/preprocessing/class-use/LabeledDatasetLoader.html
index e8c142b..9929adf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/preprocessing/class-use/LabeledDatasetLoader.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/preprocessing/class-use/LabeledDatasetLoader.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/structures/preprocessing/class-use/LabeledDatasetLoader.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.structures.preprocessing.LabeledDatasetLoader (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/preprocessing/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/preprocessing/package-frame.html
index 9654368..5ddbcc5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/preprocessing/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/preprocessing/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/structures/preprocessing/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.structures.preprocessing (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/preprocessing/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/preprocessing/package-summary.html
index c3e82f3..952260d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/preprocessing/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/preprocessing/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/structures/preprocessing/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.structures.preprocessing (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/preprocessing/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/preprocessing/package-tree.html
index a99892a..7f6537d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/preprocessing/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/preprocessing/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/structures/preprocessing/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.structures.preprocessing Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/preprocessing/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/preprocessing/package-use.html
index 51f4e19..c828b98 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/preprocessing/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/structures/preprocessing/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/structures/preprocessing/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.structures.preprocessing (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/svm/SVMLinearClassificationModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/svm/SVMLinearClassificationModel.html
index 8425576..1bee514 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/svm/SVMLinearClassificationModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/svm/SVMLinearClassificationModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/svm/SVMLinearClassificationModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SVMLinearClassificationModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/svm/SVMLinearClassificationTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/svm/SVMLinearClassificationTrainer.html
index 1a10def..c592f78 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/svm/SVMLinearClassificationTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/svm/SVMLinearClassificationTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/svm/SVMLinearClassificationTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SVMLinearClassificationTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/svm/class-use/SVMLinearClassificationModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/svm/class-use/SVMLinearClassificationModel.html
index dbb49a6..08b055e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/svm/class-use/SVMLinearClassificationModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/svm/class-use/SVMLinearClassificationModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/svm/class-use/SVMLinearClassificationModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.svm.SVMLinearClassificationModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/svm/class-use/SVMLinearClassificationTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/svm/class-use/SVMLinearClassificationTrainer.html
index e02d70c..282909e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/svm/class-use/SVMLinearClassificationTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/svm/class-use/SVMLinearClassificationTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/svm/class-use/SVMLinearClassificationTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.svm.SVMLinearClassificationTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/svm/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/svm/package-frame.html
index 0e1a0e4..64abd2f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/svm/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/svm/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/svm/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.svm (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/svm/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/svm/package-summary.html
index 5227e44..c275ef1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/svm/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/svm/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/svm/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.svm (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/svm/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/svm/package-tree.html
index b9d8027..13fe89d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/svm/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/svm/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/svm/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.svm Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/svm/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/svm/package-use.html
index dd4c57c..a73c6e8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/svm/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/svm/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/svm/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.svm (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/AdaptableDatasetModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/AdaptableDatasetModel.html
index 1347d47..8925765 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/AdaptableDatasetModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/AdaptableDatasetModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/trainers/AdaptableDatasetModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>AdaptableDatasetModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/AdaptableDatasetTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/AdaptableDatasetTrainer.html
index 1c9916c..dbb5172 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/AdaptableDatasetTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/AdaptableDatasetTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/trainers/AdaptableDatasetTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>AdaptableDatasetTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/DatasetTrainer.EmptyDatasetException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/DatasetTrainer.EmptyDatasetException.html
index 6e2078a..8555d05 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/DatasetTrainer.EmptyDatasetException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/DatasetTrainer.EmptyDatasetException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/trainers/DatasetTrainer.EmptyDatasetException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DatasetTrainer.EmptyDatasetException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/DatasetTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/DatasetTrainer.html
index 5ec4dbb..c2b70c7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/DatasetTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/DatasetTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/trainers/DatasetTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DatasetTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/FeatureLabelExtractor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/FeatureLabelExtractor.html
index 2a318d2..d47e3b8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/FeatureLabelExtractor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/FeatureLabelExtractor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/trainers/FeatureLabelExtractor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>FeatureLabelExtractor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/MultiLabelDatasetTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/MultiLabelDatasetTrainer.html
index e472db8..0e478ce 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/MultiLabelDatasetTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/MultiLabelDatasetTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/trainers/MultiLabelDatasetTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MultiLabelDatasetTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/SingleLabelDatasetTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/SingleLabelDatasetTrainer.html
index 1316fc2..2f97f7f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/SingleLabelDatasetTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/SingleLabelDatasetTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/trainers/SingleLabelDatasetTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SingleLabelDatasetTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/TrainerTransformers.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/TrainerTransformers.html
index 52809ed..9d0653b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/TrainerTransformers.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/TrainerTransformers.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/trainers/TrainerTransformers.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TrainerTransformers (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/class-use/AdaptableDatasetModel.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/class-use/AdaptableDatasetModel.html
index f3c08fe..2384b5b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/class-use/AdaptableDatasetModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/class-use/AdaptableDatasetModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/trainers/class-use/AdaptableDatasetModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.trainers.AdaptableDatasetModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/class-use/AdaptableDatasetTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/class-use/AdaptableDatasetTrainer.html
index c1341b0..f29f1ad 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/class-use/AdaptableDatasetTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/class-use/AdaptableDatasetTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/trainers/class-use/AdaptableDatasetTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.trainers.AdaptableDatasetTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/class-use/DatasetTrainer.EmptyDatasetException.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/class-use/DatasetTrainer.EmptyDatasetException.html
index fd9d625..2de49a6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/class-use/DatasetTrainer.EmptyDatasetException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/class-use/DatasetTrainer.EmptyDatasetException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/trainers/class-use/DatasetTrainer.EmptyDatasetException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.trainers.DatasetTrainer.EmptyDatasetException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/class-use/DatasetTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/class-use/DatasetTrainer.html
index 2223b42..c46de84 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/class-use/DatasetTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/class-use/DatasetTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/trainers/class-use/DatasetTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.trainers.DatasetTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/class-use/FeatureLabelExtractor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/class-use/FeatureLabelExtractor.html
index 77ddec2..b6754d3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/class-use/FeatureLabelExtractor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/class-use/FeatureLabelExtractor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/trainers/class-use/FeatureLabelExtractor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.trainers.FeatureLabelExtractor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/class-use/MultiLabelDatasetTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/class-use/MultiLabelDatasetTrainer.html
index f343b57..dca0e5f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/class-use/MultiLabelDatasetTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/class-use/MultiLabelDatasetTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/trainers/class-use/MultiLabelDatasetTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.trainers.MultiLabelDatasetTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/class-use/SingleLabelDatasetTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/class-use/SingleLabelDatasetTrainer.html
index a505d7a..12d75db 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/class-use/SingleLabelDatasetTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/class-use/SingleLabelDatasetTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/trainers/class-use/SingleLabelDatasetTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.trainers.SingleLabelDatasetTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/class-use/TrainerTransformers.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/class-use/TrainerTransformers.html
index ed88a6a..1c8eb9d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/class-use/TrainerTransformers.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/class-use/TrainerTransformers.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/trainers/class-use/TrainerTransformers.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.trainers.TrainerTransformers (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/package-frame.html
index 04c9724..61090e9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/trainers/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.trainers (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/package-summary.html
index b9129ad..cafe1fd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/trainers/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.trainers (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/package-tree.html
index 1e7585f..df6ed01 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/trainers/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.trainers Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/package-use.html
index 95e9c92..c179f16 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/trainers/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.trainers (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/transformers/BaggingUpstreamTransformer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/transformers/BaggingUpstreamTransformer.html
index 3591ef5..856d7c7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/transformers/BaggingUpstreamTransformer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/transformers/BaggingUpstreamTransformer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/trainers/transformers/BaggingUpstreamTransformer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BaggingUpstreamTransformer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/transformers/class-use/BaggingUpstreamTransformer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/transformers/class-use/BaggingUpstreamTransformer.html
index f83c586..dee1e42 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/transformers/class-use/BaggingUpstreamTransformer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/transformers/class-use/BaggingUpstreamTransformer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/trainers/transformers/class-use/BaggingUpstreamTransformer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.trainers.transformers.BaggingUpstreamTransformer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/transformers/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/transformers/package-frame.html
index f43245a..0bad743 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/transformers/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/transformers/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/trainers/transformers/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.trainers.transformers (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/transformers/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/transformers/package-summary.html
index d4c6390..9e104f9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/transformers/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/transformers/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/trainers/transformers/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.trainers.transformers (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/transformers/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/transformers/package-tree.html
index 2309744..5afd4a1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/transformers/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/transformers/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/trainers/transformers/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.trainers.transformers Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/transformers/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/transformers/package-use.html
index 0f3605d..a1dae11 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/transformers/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/trainers/transformers/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/trainers/transformers/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.trainers.transformers (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/DecisionTree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/DecisionTree.html
index d0edd00..a2901f7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/DecisionTree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/DecisionTree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/DecisionTree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DecisionTree (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/DecisionTreeClassificationTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/DecisionTreeClassificationTrainer.html
index 65d1f6c..bfdd2f7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/DecisionTreeClassificationTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/DecisionTreeClassificationTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/DecisionTreeClassificationTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DecisionTreeClassificationTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/DecisionTreeConditionalNode.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/DecisionTreeConditionalNode.html
index a03d977..099de6e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/DecisionTreeConditionalNode.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/DecisionTreeConditionalNode.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/DecisionTreeConditionalNode.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DecisionTreeConditionalNode (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/DecisionTreeLeafNode.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/DecisionTreeLeafNode.html
index b17d382..8b5db2a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/DecisionTreeLeafNode.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/DecisionTreeLeafNode.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/DecisionTreeLeafNode.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DecisionTreeLeafNode (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/DecisionTreeNode.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/DecisionTreeNode.html
index 86ecad2..2e5604b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/DecisionTreeNode.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/DecisionTreeNode.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/DecisionTreeNode.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DecisionTreeNode (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/DecisionTreeRegressionTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/DecisionTreeRegressionTrainer.html
index f9ffff6..43d73f7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/DecisionTreeRegressionTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/DecisionTreeRegressionTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/DecisionTreeRegressionTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DecisionTreeRegressionTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/TreeFilter.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/TreeFilter.html
index 5bc2abd..6a7eee8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/TreeFilter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/TreeFilter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/TreeFilter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TreeFilter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/GDBBinaryClassifierOnTreesTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/GDBBinaryClassifierOnTreesTrainer.html
index 3355eaf..67c1a3e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/GDBBinaryClassifierOnTreesTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/GDBBinaryClassifierOnTreesTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/boosting/GDBBinaryClassifierOnTreesTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GDBBinaryClassifierOnTreesTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/GDBOnTreesLearningStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/GDBOnTreesLearningStrategy.html
index 32fa1fc..ddc17ea 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/GDBOnTreesLearningStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/GDBOnTreesLearningStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/boosting/GDBOnTreesLearningStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GDBOnTreesLearningStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/GDBRegressionOnTreesTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/GDBRegressionOnTreesTrainer.html
index 4224929..27cc247 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/GDBRegressionOnTreesTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/GDBRegressionOnTreesTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/boosting/GDBRegressionOnTreesTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GDBRegressionOnTreesTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/class-use/GDBBinaryClassifierOnTreesTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/class-use/GDBBinaryClassifierOnTreesTrainer.html
index e2ad068..93a7077 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/class-use/GDBBinaryClassifierOnTreesTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/class-use/GDBBinaryClassifierOnTreesTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/boosting/class-use/GDBBinaryClassifierOnTreesTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.boosting.GDBBinaryClassifierOnTreesTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/class-use/GDBOnTreesLearningStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/class-use/GDBOnTreesLearningStrategy.html
index 9603a37..40b14df 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/class-use/GDBOnTreesLearningStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/class-use/GDBOnTreesLearningStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/boosting/class-use/GDBOnTreesLearningStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.boosting.GDBOnTreesLearningStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/class-use/GDBRegressionOnTreesTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/class-use/GDBRegressionOnTreesTrainer.html
index d55c83f..da362c0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/class-use/GDBRegressionOnTreesTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/class-use/GDBRegressionOnTreesTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/boosting/class-use/GDBRegressionOnTreesTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.boosting.GDBRegressionOnTreesTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/package-frame.html
index ffd9fee..63c72c6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/boosting/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.boosting (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/package-summary.html
index eeedf73..7d14488 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/boosting/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.boosting (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/package-tree.html
index e5e0373..7ddb9a7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/boosting/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.boosting Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/package-use.html
index f9e03d1..5c10610 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/boosting/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/boosting/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.tree.boosting (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/class-use/DecisionTree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/class-use/DecisionTree.html
index 517fc79..637d600 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/class-use/DecisionTree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/class-use/DecisionTree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/class-use/DecisionTree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.DecisionTree (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/class-use/DecisionTreeClassificationTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/class-use/DecisionTreeClassificationTrainer.html
index a856a8d..d7ceff7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/class-use/DecisionTreeClassificationTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/class-use/DecisionTreeClassificationTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/class-use/DecisionTreeClassificationTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.DecisionTreeClassificationTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/class-use/DecisionTreeConditionalNode.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/class-use/DecisionTreeConditionalNode.html
index 2dd295a..20b7db8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/class-use/DecisionTreeConditionalNode.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/class-use/DecisionTreeConditionalNode.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/class-use/DecisionTreeConditionalNode.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.DecisionTreeConditionalNode (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/class-use/DecisionTreeLeafNode.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/class-use/DecisionTreeLeafNode.html
index 5573b90..8a0614a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/class-use/DecisionTreeLeafNode.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/class-use/DecisionTreeLeafNode.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/class-use/DecisionTreeLeafNode.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.DecisionTreeLeafNode (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/class-use/DecisionTreeNode.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/class-use/DecisionTreeNode.html
index 87cda0c..bc30725 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/class-use/DecisionTreeNode.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/class-use/DecisionTreeNode.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/class-use/DecisionTreeNode.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.tree.DecisionTreeNode (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/class-use/DecisionTreeRegressionTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/class-use/DecisionTreeRegressionTrainer.html
index a792e5d..be2b373 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/class-use/DecisionTreeRegressionTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/class-use/DecisionTreeRegressionTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/class-use/DecisionTreeRegressionTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.DecisionTreeRegressionTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/class-use/TreeFilter.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/class-use/TreeFilter.html
index 8b1dc47..62aae45 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/class-use/TreeFilter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/class-use/TreeFilter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/class-use/TreeFilter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.tree.TreeFilter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/DecisionTreeData.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/DecisionTreeData.html
index 12dfd23..6b01e01 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/DecisionTreeData.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/DecisionTreeData.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/data/DecisionTreeData.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DecisionTreeData (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/DecisionTreeDataBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/DecisionTreeDataBuilder.html
index 0fc3d43..5addd40 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/DecisionTreeDataBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/DecisionTreeDataBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/data/DecisionTreeDataBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DecisionTreeDataBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/TreeDataIndex.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/TreeDataIndex.html
index 2feb854..b4874ce 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/TreeDataIndex.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/TreeDataIndex.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/data/TreeDataIndex.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TreeDataIndex (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/class-use/DecisionTreeData.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/class-use/DecisionTreeData.html
index 06f53d8..37efd32 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/class-use/DecisionTreeData.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/class-use/DecisionTreeData.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/data/class-use/DecisionTreeData.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.data.DecisionTreeData (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/class-use/DecisionTreeDataBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/class-use/DecisionTreeDataBuilder.html
index 2ceca0f..4518110 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/class-use/DecisionTreeDataBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/class-use/DecisionTreeDataBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/data/class-use/DecisionTreeDataBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.data.DecisionTreeDataBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/class-use/TreeDataIndex.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/class-use/TreeDataIndex.html
index abdb1e4..db68dc4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/class-use/TreeDataIndex.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/class-use/TreeDataIndex.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/data/class-use/TreeDataIndex.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.data.TreeDataIndex (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/package-frame.html
index 72a586c..d28f0ed 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/data/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.data (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/package-summary.html
index 8844dc0..a76ac86 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/data/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.data (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/package-tree.html
index 6dee646..a062bae 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/data/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.data Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/package-use.html
index f7f8894..1e6a9c4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/data/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/data/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.tree.data (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/ImpurityMeasure.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/ImpurityMeasure.html
index d4f6e11..4ee9e58 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/ImpurityMeasure.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/ImpurityMeasure.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/impurity/ImpurityMeasure.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ImpurityMeasure (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/ImpurityMeasureCalculator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/ImpurityMeasureCalculator.html
index 4751b2b..d8c2d6c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/ImpurityMeasureCalculator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/ImpurityMeasureCalculator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/impurity/ImpurityMeasureCalculator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ImpurityMeasureCalculator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/class-use/ImpurityMeasure.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/class-use/ImpurityMeasure.html
index 408707f..5ab789d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/class-use/ImpurityMeasure.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/class-use/ImpurityMeasure.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/impurity/class-use/ImpurityMeasure.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.tree.impurity.ImpurityMeasure (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/class-use/ImpurityMeasureCalculator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/class-use/ImpurityMeasureCalculator.html
index 41c2f8a..028a645 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/class-use/ImpurityMeasureCalculator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/class-use/ImpurityMeasureCalculator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/impurity/class-use/ImpurityMeasureCalculator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.impurity.ImpurityMeasureCalculator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/gini/GiniImpurityMeasure.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/gini/GiniImpurityMeasure.html
index 6f777b4..04e8427 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/gini/GiniImpurityMeasure.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/gini/GiniImpurityMeasure.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/impurity/gini/GiniImpurityMeasure.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GiniImpurityMeasure (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/gini/GiniImpurityMeasureCalculator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/gini/GiniImpurityMeasureCalculator.html
index 33387c4..958f05d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/gini/GiniImpurityMeasureCalculator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/gini/GiniImpurityMeasureCalculator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/impurity/gini/GiniImpurityMeasureCalculator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GiniImpurityMeasureCalculator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/gini/class-use/GiniImpurityMeasure.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/gini/class-use/GiniImpurityMeasure.html
index e912da7..4cba92f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/gini/class-use/GiniImpurityMeasure.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/gini/class-use/GiniImpurityMeasure.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/impurity/gini/class-use/GiniImpurityMeasure.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.impurity.gini.GiniImpurityMeasure (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/gini/class-use/GiniImpurityMeasureCalculator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/gini/class-use/GiniImpurityMeasureCalculator.html
index 7d1e43a..fd43f29 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/gini/class-use/GiniImpurityMeasureCalculator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/gini/class-use/GiniImpurityMeasureCalculator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/impurity/gini/class-use/GiniImpurityMeasureCalculator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.impurity.gini.GiniImpurityMeasureCalculator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/gini/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/gini/package-frame.html
index 5128119..2df9c4e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/gini/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/gini/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/impurity/gini/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.impurity.gini (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/gini/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/gini/package-summary.html
index ef8b806..95981ff 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/gini/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/gini/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/impurity/gini/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.impurity.gini (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/gini/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/gini/package-tree.html
index f1964f3..72a2764 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/gini/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/gini/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/impurity/gini/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.impurity.gini Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/gini/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/gini/package-use.html
index 802d6c1..500b5f5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/gini/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/gini/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/impurity/gini/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.tree.impurity.gini (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/mse/MSEImpurityMeasure.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/mse/MSEImpurityMeasure.html
index 00a3600..fab6897 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/mse/MSEImpurityMeasure.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/mse/MSEImpurityMeasure.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/impurity/mse/MSEImpurityMeasure.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MSEImpurityMeasure (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/mse/MSEImpurityMeasureCalculator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/mse/MSEImpurityMeasureCalculator.html
index ecaccb1..152ba09 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/mse/MSEImpurityMeasureCalculator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/mse/MSEImpurityMeasureCalculator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/impurity/mse/MSEImpurityMeasureCalculator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MSEImpurityMeasureCalculator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/mse/class-use/MSEImpurityMeasure.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/mse/class-use/MSEImpurityMeasure.html
index f497fc3..f93c190 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/mse/class-use/MSEImpurityMeasure.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/mse/class-use/MSEImpurityMeasure.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/impurity/mse/class-use/MSEImpurityMeasure.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.impurity.mse.MSEImpurityMeasure (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/mse/class-use/MSEImpurityMeasureCalculator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/mse/class-use/MSEImpurityMeasureCalculator.html
index 281397e..534b524 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/mse/class-use/MSEImpurityMeasureCalculator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/mse/class-use/MSEImpurityMeasureCalculator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/impurity/mse/class-use/MSEImpurityMeasureCalculator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.impurity.mse.MSEImpurityMeasureCalculator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/mse/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/mse/package-frame.html
index 08318d0..a4e2fa3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/mse/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/mse/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/impurity/mse/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.impurity.mse (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/mse/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/mse/package-summary.html
index 2d7d2a4..fa25462 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/mse/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/mse/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/impurity/mse/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.impurity.mse (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/mse/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/mse/package-tree.html
index 36d99b4..60e6679 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/mse/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/mse/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/impurity/mse/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.impurity.mse Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/mse/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/mse/package-use.html
index 5620d3a..1eb058a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/mse/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/mse/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/impurity/mse/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.tree.impurity.mse (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/package-frame.html
index 16cf454..8a7b564 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/impurity/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.impurity (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/package-summary.html
index d1f8662..1c4307c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/impurity/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.impurity (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/package-tree.html
index f6b23cf..37b2279 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/impurity/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.impurity Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/package-use.html
index 22f1854..a357111 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/impurity/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.tree.impurity (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/SimpleStepFunctionCompressor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/SimpleStepFunctionCompressor.html
index 6c22c5e..747397a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/SimpleStepFunctionCompressor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/SimpleStepFunctionCompressor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/impurity/util/SimpleStepFunctionCompressor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SimpleStepFunctionCompressor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/StepFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/StepFunction.html
index 71679de..44d4917 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/StepFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/StepFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/impurity/util/StepFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>StepFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/StepFunctionCompressor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/StepFunctionCompressor.html
index 6202e29..7090747 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/StepFunctionCompressor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/StepFunctionCompressor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/impurity/util/StepFunctionCompressor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>StepFunctionCompressor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/class-use/SimpleStepFunctionCompressor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/class-use/SimpleStepFunctionCompressor.html
index 95016f7..8850818 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/class-use/SimpleStepFunctionCompressor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/class-use/SimpleStepFunctionCompressor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/impurity/util/class-use/SimpleStepFunctionCompressor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.impurity.util.SimpleStepFunctionCompressor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/class-use/StepFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/class-use/StepFunction.html
index 0899203..c5d95c2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/class-use/StepFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/class-use/StepFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/impurity/util/class-use/StepFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.impurity.util.StepFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/class-use/StepFunctionCompressor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/class-use/StepFunctionCompressor.html
index 88cfb25..88bd46b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/class-use/StepFunctionCompressor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/class-use/StepFunctionCompressor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/impurity/util/class-use/StepFunctionCompressor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.tree.impurity.util.StepFunctionCompressor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/package-frame.html
index 21bb3dd..885a929 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/impurity/util/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.impurity.util (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/package-summary.html
index ea83efe..cd13b07 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/impurity/util/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.impurity.util (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/package-tree.html
index f7f5004..898770a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/impurity/util/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.impurity.util Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/package-use.html
index 7774bb2..cad1c71 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/impurity/util/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/impurity/util/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.tree.impurity.util (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/DecisionTreeLeafBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/DecisionTreeLeafBuilder.html
index ba07d07..aabd978 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/DecisionTreeLeafBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/DecisionTreeLeafBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/leaf/DecisionTreeLeafBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DecisionTreeLeafBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/MeanDecisionTreeLeafBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/MeanDecisionTreeLeafBuilder.html
index 7e3f331..fdb8b6e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/MeanDecisionTreeLeafBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/MeanDecisionTreeLeafBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/leaf/MeanDecisionTreeLeafBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MeanDecisionTreeLeafBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/MostCommonDecisionTreeLeafBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/MostCommonDecisionTreeLeafBuilder.html
index 416d366..55d4351 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/MostCommonDecisionTreeLeafBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/MostCommonDecisionTreeLeafBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/leaf/MostCommonDecisionTreeLeafBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MostCommonDecisionTreeLeafBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/class-use/DecisionTreeLeafBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/class-use/DecisionTreeLeafBuilder.html
index 59c2a11..939be00 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/class-use/DecisionTreeLeafBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/class-use/DecisionTreeLeafBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/leaf/class-use/DecisionTreeLeafBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.tree.leaf.DecisionTreeLeafBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/class-use/MeanDecisionTreeLeafBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/class-use/MeanDecisionTreeLeafBuilder.html
index b456d35..f44ed3c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/class-use/MeanDecisionTreeLeafBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/class-use/MeanDecisionTreeLeafBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/leaf/class-use/MeanDecisionTreeLeafBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.leaf.MeanDecisionTreeLeafBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/class-use/MostCommonDecisionTreeLeafBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/class-use/MostCommonDecisionTreeLeafBuilder.html
index aefb903..4d4e5d0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/class-use/MostCommonDecisionTreeLeafBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/class-use/MostCommonDecisionTreeLeafBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/leaf/class-use/MostCommonDecisionTreeLeafBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.leaf.MostCommonDecisionTreeLeafBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/package-frame.html
index 51a76a4..7afb82c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/leaf/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.leaf (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/package-summary.html
index d38c4db..8e93506 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/leaf/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.leaf (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/package-tree.html
index 548c9d1..da9f183 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/leaf/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.leaf Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/package-use.html
index 7022c26..a3a6354 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/leaf/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/leaf/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.tree.leaf (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/package-frame.html
index 052e647..81687ae 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/package-summary.html
index b3e573a..a8f0709 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/package-tree.html
index 4e10d62..f82e9cd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/package-use.html
index b56e0ec..ffb1d12 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.tree (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/RandomForestClassifierTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/RandomForestClassifierTrainer.html
index 2620fb2..7b1e383 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/RandomForestClassifierTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/RandomForestClassifierTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/RandomForestClassifierTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>RandomForestClassifierTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/RandomForestRegressionTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/RandomForestRegressionTrainer.html
index 318e63a..fca208b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/RandomForestRegressionTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/RandomForestRegressionTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/RandomForestRegressionTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>RandomForestRegressionTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/RandomForestTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/RandomForestTrainer.html
index 5d3f6ab..6e72470 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/RandomForestTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/RandomForestTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/RandomForestTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>RandomForestTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/class-use/RandomForestClassifierTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/class-use/RandomForestClassifierTrainer.html
index 44b48d8..b2945e0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/class-use/RandomForestClassifierTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/class-use/RandomForestClassifierTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/class-use/RandomForestClassifierTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.randomforest.RandomForestClassifierTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/class-use/RandomForestRegressionTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/class-use/RandomForestRegressionTrainer.html
index 6b5050e..afc3672 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/class-use/RandomForestRegressionTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/class-use/RandomForestRegressionTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/class-use/RandomForestRegressionTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.randomforest.RandomForestRegressionTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/class-use/RandomForestTrainer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/class-use/RandomForestTrainer.html
index 6f35761..f61068b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/class-use/RandomForestTrainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/class-use/RandomForestTrainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/class-use/RandomForestTrainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.randomforest.RandomForestTrainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/FeaturesCountSelectionStrategies.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/FeaturesCountSelectionStrategies.html
index a16ae3b..2cedf9e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/FeaturesCountSelectionStrategies.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/FeaturesCountSelectionStrategies.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/FeaturesCountSelectionStrategies.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>FeaturesCountSelectionStrategies (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/NodeId.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/NodeId.html
index ed6f67a..52d9fba 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/NodeId.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/NodeId.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/NodeId.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NodeId (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/NodeSplit.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/NodeSplit.html
index afec57e..d46db5f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/NodeSplit.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/NodeSplit.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/NodeSplit.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NodeSplit (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/TreeNode.Type.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/TreeNode.Type.html
index 3456e7e..3b48236 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/TreeNode.Type.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/TreeNode.Type.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/TreeNode.Type.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TreeNode.Type (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/TreeNode.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/TreeNode.html
index f79735f..4abdcc1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/TreeNode.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/TreeNode.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/TreeNode.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TreeNode (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/TreeRoot.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/TreeRoot.html
index fae303f..dbc8cdd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/TreeRoot.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/TreeRoot.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/TreeRoot.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TreeRoot (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/class-use/FeaturesCountSelectionStrategies.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/class-use/FeaturesCountSelectionStrategies.html
index 738b5c3..e5c62a2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/class-use/FeaturesCountSelectionStrategies.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/class-use/FeaturesCountSelectionStrategies.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/class-use/FeaturesCountSelectionStrategies.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.randomforest.data.FeaturesCountSelectionStrategies (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/class-use/NodeId.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/class-use/NodeId.html
index 88f9399..26cadc0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/class-use/NodeId.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/class-use/NodeId.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/class-use/NodeId.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.randomforest.data.NodeId (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/class-use/NodeSplit.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/class-use/NodeSplit.html
index 25a81be..2ffa58c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/class-use/NodeSplit.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/class-use/NodeSplit.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/class-use/NodeSplit.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.randomforest.data.NodeSplit (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/class-use/TreeNode.Type.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/class-use/TreeNode.Type.html
index 43a81b5..9e8e5fa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/class-use/TreeNode.Type.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/class-use/TreeNode.Type.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/class-use/TreeNode.Type.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.randomforest.data.TreeNode.Type (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/class-use/TreeNode.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/class-use/TreeNode.html
index c60d99f..b26b025 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/class-use/TreeNode.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/class-use/TreeNode.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/class-use/TreeNode.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.randomforest.data.TreeNode (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/class-use/TreeRoot.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/class-use/TreeRoot.html
index 10a50d6..da8ca15 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/class-use/TreeRoot.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/class-use/TreeRoot.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/class-use/TreeRoot.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.randomforest.data.TreeRoot (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/GiniHistogram.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/GiniHistogram.html
index 62f9d7d..3d098be 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/GiniHistogram.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/GiniHistogram.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/GiniHistogram.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GiniHistogram (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/GiniHistogramsComputer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/GiniHistogramsComputer.html
index 2d5a14d..52feae8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/GiniHistogramsComputer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/GiniHistogramsComputer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/GiniHistogramsComputer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GiniHistogramsComputer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/ImpurityComputer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/ImpurityComputer.html
index 8ab8a1e..4a26c2f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/ImpurityComputer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/ImpurityComputer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/ImpurityComputer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ImpurityComputer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/ImpurityHistogram.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/ImpurityHistogram.html
index 518f3e2..b69dba9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/ImpurityHistogram.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/ImpurityHistogram.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/ImpurityHistogram.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ImpurityHistogram (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/ImpurityHistogramsComputer.NodeImpurityHistograms.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/ImpurityHistogramsComputer.NodeImpurityHistograms.html
index ba85191..010be41 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/ImpurityHistogramsComputer.NodeImpurityHistograms.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/ImpurityHistogramsComputer.NodeImpurityHistograms.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/ImpurityHistogramsComputer.NodeImpurityHistograms.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ImpurityHistogramsComputer.NodeImpurityHistograms (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/ImpurityHistogramsComputer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/ImpurityHistogramsComputer.html
index 137f9c6..03dabe0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/ImpurityHistogramsComputer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/ImpurityHistogramsComputer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/ImpurityHistogramsComputer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ImpurityHistogramsComputer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/MSEHistogram.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/MSEHistogram.html
index b6ba9fd..72d4100 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/MSEHistogram.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/MSEHistogram.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/MSEHistogram.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MSEHistogram (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/MSEHistogramComputer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/MSEHistogramComputer.html
index c6eae58..5fbbaeb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/MSEHistogramComputer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/MSEHistogramComputer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/MSEHistogramComputer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MSEHistogramComputer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/BootstrappedVectorsHistogram.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/BootstrappedVectorsHistogram.html
index ba23c46..bd2128f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/BootstrappedVectorsHistogram.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/BootstrappedVectorsHistogram.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/BootstrappedVectorsHistogram.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BootstrappedVectorsHistogram (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/CountersHistogram.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/CountersHistogram.html
index 73a3a9d..b54e170 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/CountersHistogram.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/CountersHistogram.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/CountersHistogram.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CountersHistogram (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/class-use/BootstrappedVectorsHistogram.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/class-use/BootstrappedVectorsHistogram.html
index 8f7df78..7c7c3cc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/class-use/BootstrappedVectorsHistogram.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/class-use/BootstrappedVectorsHistogram.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/class-use/BootstrappedVectorsHistogram.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.randomforest.data.impurity.basic.BootstrappedVectorsHistogram (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/class-use/CountersHistogram.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/class-use/CountersHistogram.html
index af9dea7..1b12aac 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/class-use/CountersHistogram.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/class-use/CountersHistogram.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/class-use/CountersHistogram.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.randomforest.data.impurity.basic.CountersHistogram (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/package-frame.html
index cfd93db..e0d63d3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.randomforest.data.impurity.basic (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/package-summary.html
index 9c0de2b..459c829 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.randomforest.data.impurity.basic (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/package-tree.html
index 170ff96..d110d29 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.randomforest.data.impurity.basic Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/package-use.html
index df8439c..c115bcc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/basic/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.tree.randomforest.data.impurity.basic (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/GiniHistogram.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/GiniHistogram.html
index 77106bd..d9ac8aa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/GiniHistogram.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/GiniHistogram.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/GiniHistogram.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.randomforest.data.impurity.GiniHistogram (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/GiniHistogramsComputer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/GiniHistogramsComputer.html
index 942389e..eb65170 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/GiniHistogramsComputer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/GiniHistogramsComputer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/GiniHistogramsComputer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.randomforest.data.impurity.GiniHistogramsComputer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/ImpurityComputer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/ImpurityComputer.html
index a20bae0..8e0b5e9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/ImpurityComputer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/ImpurityComputer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/ImpurityComputer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.tree.randomforest.data.impurity.ImpurityComputer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/ImpurityHistogram.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/ImpurityHistogram.html
index 3ef6190..6d8e084 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/ImpurityHistogram.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/ImpurityHistogram.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/ImpurityHistogram.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.randomforest.data.impurity.ImpurityHistogram (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/ImpurityHistogramsComputer.NodeImpurityHistograms.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/ImpurityHistogramsComputer.NodeImpurityHistograms.html
index 2425f1f..820dd1a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/ImpurityHistogramsComputer.NodeImpurityHistograms.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/ImpurityHistogramsComputer.NodeImpurityHistograms.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/ImpurityHistogramsComputer.NodeImpurityHistograms.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.randomforest.data.impurity.ImpurityHistogramsComputer.NodeImpurityHistograms (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/ImpurityHistogramsComputer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/ImpurityHistogramsComputer.html
index ce48797..5005a06 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/ImpurityHistogramsComputer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/ImpurityHistogramsComputer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/ImpurityHistogramsComputer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.randomforest.data.impurity.ImpurityHistogramsComputer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/MSEHistogram.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/MSEHistogram.html
index 6803126..c492b20 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/MSEHistogram.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/MSEHistogram.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/MSEHistogram.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.randomforest.data.impurity.MSEHistogram (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/MSEHistogramComputer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/MSEHistogramComputer.html
index 24bcc29..c64904e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/MSEHistogramComputer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/MSEHistogramComputer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/class-use/MSEHistogramComputer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.randomforest.data.impurity.MSEHistogramComputer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/package-frame.html
index 088132d..e6fa414 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.randomforest.data.impurity (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/package-summary.html
index c5eb0f3..df55d50 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.randomforest.data.impurity (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/package-tree.html
index 9ce0f58..0ef4849 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.randomforest.data.impurity Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/package-use.html
index 891fc8c..8b32b5e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/impurity/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.tree.randomforest.data.impurity (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/package-frame.html
index ab49088..a984699 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.randomforest.data (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/package-summary.html
index 010ad62..cbc2644 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.randomforest.data (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/package-tree.html
index f1b37f7..e0cf670 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.randomforest.data Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/package-use.html
index 7cfb2c2..45ae34b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.tree.randomforest.data (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/ClassifierLeafValuesComputer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/ClassifierLeafValuesComputer.html
index 2ca974e..be607e7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/ClassifierLeafValuesComputer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/ClassifierLeafValuesComputer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/ClassifierLeafValuesComputer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClassifierLeafValuesComputer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/LeafValuesComputer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/LeafValuesComputer.html
index 9a038de..862a8d2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/LeafValuesComputer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/LeafValuesComputer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/LeafValuesComputer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LeafValuesComputer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/MeanValueStatistic.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/MeanValueStatistic.html
index a081ba0..eae8655 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/MeanValueStatistic.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/MeanValueStatistic.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/MeanValueStatistic.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MeanValueStatistic (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/NormalDistributionStatistics.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/NormalDistributionStatistics.html
index 4c169a1..c20ec29 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/NormalDistributionStatistics.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/NormalDistributionStatistics.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/NormalDistributionStatistics.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NormalDistributionStatistics (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/NormalDistributionStatisticsComputer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/NormalDistributionStatisticsComputer.html
index 0a33275..ed3326f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/NormalDistributionStatisticsComputer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/NormalDistributionStatisticsComputer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/NormalDistributionStatisticsComputer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NormalDistributionStatisticsComputer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/RegressionLeafValuesComputer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/RegressionLeafValuesComputer.html
index ac60cb8..2600992 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/RegressionLeafValuesComputer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/RegressionLeafValuesComputer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/RegressionLeafValuesComputer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:11 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>RegressionLeafValuesComputer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/class-use/ClassifierLeafValuesComputer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/class-use/ClassifierLeafValuesComputer.html
index 04a2c63..06813e5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/class-use/ClassifierLeafValuesComputer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/class-use/ClassifierLeafValuesComputer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/class-use/ClassifierLeafValuesComputer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.randomforest.data.statistics.ClassifierLeafValuesComputer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/class-use/LeafValuesComputer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/class-use/LeafValuesComputer.html
index 6e4637d..a41a55d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/class-use/LeafValuesComputer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/class-use/LeafValuesComputer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/class-use/LeafValuesComputer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.randomforest.data.statistics.LeafValuesComputer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/class-use/MeanValueStatistic.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/class-use/MeanValueStatistic.html
index 4a2d869..6879b76 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/class-use/MeanValueStatistic.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/class-use/MeanValueStatistic.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/class-use/MeanValueStatistic.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.randomforest.data.statistics.MeanValueStatistic (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/class-use/NormalDistributionStatistics.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/class-use/NormalDistributionStatistics.html
index 0fd5c2c..3e86765 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/class-use/NormalDistributionStatistics.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/class-use/NormalDistributionStatistics.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/class-use/NormalDistributionStatistics.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.randomforest.data.statistics.NormalDistributionStatistics (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/class-use/NormalDistributionStatisticsComputer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/class-use/NormalDistributionStatisticsComputer.html
index 7bb2f9b..3bc2c92 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/class-use/NormalDistributionStatisticsComputer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/class-use/NormalDistributionStatisticsComputer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/class-use/NormalDistributionStatisticsComputer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.randomforest.data.statistics.NormalDistributionStatisticsComputer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/class-use/RegressionLeafValuesComputer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/class-use/RegressionLeafValuesComputer.html
index ad4ea9c..d44b660 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/class-use/RegressionLeafValuesComputer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/class-use/RegressionLeafValuesComputer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/class-use/RegressionLeafValuesComputer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.tree.randomforest.data.statistics.RegressionLeafValuesComputer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/package-frame.html
index 1e12248..bbbcb87 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.randomforest.data.statistics (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/package-summary.html
index 214a10f..da981dd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.randomforest.data.statistics (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/package-tree.html
index c14a080..f8a6afd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.randomforest.data.statistics Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/package-use.html
index 628984a..f714dfb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/data/statistics/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.tree.randomforest.data.statistics (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/package-frame.html
index da9d0b4..4e3a11d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.randomforest (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/package-summary.html
index 2421a80..46e2d60 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.randomforest (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/package-tree.html
index 8ff2b93..70032c2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.tree.randomforest Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/package-use.html
index 22a3703..ed3ecc6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/tree/randomforest/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/tree/randomforest/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.tree.randomforest (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/LRUCache.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/LRUCache.html
index cd6d07e..e6926ac 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/LRUCache.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/LRUCache.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/LRUCache.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LRUCache (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/LRUCacheExpirationListener.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/LRUCacheExpirationListener.html
index 37485a5..b0a16b2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/LRUCacheExpirationListener.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/LRUCacheExpirationListener.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/LRUCacheExpirationListener.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LRUCacheExpirationListener (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/MnistUtils.MnistImage.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/MnistUtils.MnistImage.html
index c5c4cf4..842ea56 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/MnistUtils.MnistImage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/MnistUtils.MnistImage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/MnistUtils.MnistImage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MnistUtils.MnistImage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/MnistUtils.MnistLabeledImage.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/MnistUtils.MnistLabeledImage.html
index f67b881..d16c182 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/MnistUtils.MnistLabeledImage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/MnistUtils.MnistLabeledImage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/MnistUtils.MnistLabeledImage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MnistUtils.MnistLabeledImage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/MnistUtils.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/MnistUtils.html
index 1e0ad0f..7569316 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/MnistUtils.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/MnistUtils.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/MnistUtils.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MnistUtils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/ModelTrace.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/ModelTrace.html
index e07a660..145045a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/ModelTrace.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/ModelTrace.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/ModelTrace.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ModelTrace (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/Utils.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/Utils.html
index b626ec2..6290c0d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/Utils.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/Utils.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/Utils.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Utils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/class-use/LRUCache.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/class-use/LRUCache.html
index 2c87bf3..92ef11b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/class-use/LRUCache.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/class-use/LRUCache.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/class-use/LRUCache.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.util.LRUCache (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/class-use/LRUCacheExpirationListener.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/class-use/LRUCacheExpirationListener.html
index 43ddc32..c05ee60 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/class-use/LRUCacheExpirationListener.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/class-use/LRUCacheExpirationListener.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/class-use/LRUCacheExpirationListener.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.util.LRUCacheExpirationListener (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/class-use/MnistUtils.MnistImage.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/class-use/MnistUtils.MnistImage.html
index 1034fc9..5a0beb8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/class-use/MnistUtils.MnistImage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/class-use/MnistUtils.MnistImage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/class-use/MnistUtils.MnistImage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.util.MnistUtils.MnistImage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/class-use/MnistUtils.MnistLabeledImage.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/class-use/MnistUtils.MnistLabeledImage.html
index 31e1af3..9edf92d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/class-use/MnistUtils.MnistLabeledImage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/class-use/MnistUtils.MnistLabeledImage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/class-use/MnistUtils.MnistLabeledImage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.util.MnistUtils.MnistLabeledImage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/class-use/MnistUtils.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/class-use/MnistUtils.html
index c5eef60..dab65a4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/class-use/MnistUtils.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/class-use/MnistUtils.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/class-use/MnistUtils.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.util.MnistUtils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/class-use/ModelTrace.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/class-use/ModelTrace.html
index cb4e4b3..615c6e2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/class-use/ModelTrace.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/class-use/ModelTrace.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/class-use/ModelTrace.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.util.ModelTrace (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/class-use/Utils.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/class-use/Utils.html
index f1fa28c..258b6bc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/class-use/Utils.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/class-use/Utils.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/class-use/Utils.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.util.Utils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/DataStreamGenerator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/DataStreamGenerator.html
index ce5db0d..f7b3e7d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/DataStreamGenerator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/DataStreamGenerator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/DataStreamGenerator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DataStreamGenerator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/class-use/DataStreamGenerator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/class-use/DataStreamGenerator.html
index 416b74f..94a52b1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/class-use/DataStreamGenerator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/class-use/DataStreamGenerator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/class-use/DataStreamGenerator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.util.generators.DataStreamGenerator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/package-frame.html
index 0d9edef..2b88637 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.util.generators (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/package-summary.html
index f52fb30..22b7a01 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.util.generators (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/package-tree.html
index 6fb0d3c..b0eb950 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.util.generators Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/package-use.html
index 81a9b79..c6c40d7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.util.generators (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/package-frame.html
index 964197a..3635018 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/primitives/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.util.generators.primitives (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/package-summary.html
index 2f7879e..a960d77 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/primitives/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.util.generators.primitives (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/package-tree.html
index 16956a8..4f177f2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/primitives/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.util.generators.primitives Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/package-use.html
index dc6491d..ce1d266 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/primitives/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.util.generators.primitives (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/DiscreteRandomProducer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/DiscreteRandomProducer.html
index 6a74312..622db4e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/DiscreteRandomProducer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/DiscreteRandomProducer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/DiscreteRandomProducer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DiscreteRandomProducer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/GaussRandomProducer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/GaussRandomProducer.html
index 6e6d8f2..622ee40 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/GaussRandomProducer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/GaussRandomProducer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/GaussRandomProducer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GaussRandomProducer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/RandomProducer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/RandomProducer.html
index d88fbb1..f9e57a4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/RandomProducer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/RandomProducer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/RandomProducer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>RandomProducer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/UniformRandomProducer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/UniformRandomProducer.html
index 6accd88..7ecc61d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/UniformRandomProducer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/UniformRandomProducer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/UniformRandomProducer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>UniformRandomProducer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/class-use/DiscreteRandomProducer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/class-use/DiscreteRandomProducer.html
index f6f3d45..f34b6c0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/class-use/DiscreteRandomProducer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/class-use/DiscreteRandomProducer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/class-use/DiscreteRandomProducer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.util.generators.primitives.scalar.DiscreteRandomProducer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/class-use/GaussRandomProducer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/class-use/GaussRandomProducer.html
index 8e4aaeb..3a454d3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/class-use/GaussRandomProducer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/class-use/GaussRandomProducer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/class-use/GaussRandomProducer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.util.generators.primitives.scalar.GaussRandomProducer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/class-use/RandomProducer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/class-use/RandomProducer.html
index 328e406..296e273 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/class-use/RandomProducer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/class-use/RandomProducer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/class-use/RandomProducer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.util.generators.primitives.scalar.RandomProducer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/class-use/UniformRandomProducer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/class-use/UniformRandomProducer.html
index 3a654c7..7aa8d3f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/class-use/UniformRandomProducer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/class-use/UniformRandomProducer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/class-use/UniformRandomProducer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.util.generators.primitives.scalar.UniformRandomProducer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/package-frame.html
index b7f46d7..d59e4e4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.util.generators.primitives.scalar (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/package-summary.html
index a716b73..ea39b04 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.util.generators.primitives.scalar (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/package-tree.html
index 62acde1..b0b9389 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.util.generators.primitives.scalar Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/package-use.html
index 8f757ad..5665343 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/primitives/scalar/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.util.generators.primitives.scalar (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/ParametricVectorGenerator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/ParametricVectorGenerator.html
index 17145e7..5539fe1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/ParametricVectorGenerator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/ParametricVectorGenerator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/ParametricVectorGenerator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ParametricVectorGenerator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/VectorGenerator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/VectorGenerator.html
index 45814ef..cbed5aa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/VectorGenerator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/VectorGenerator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/VectorGenerator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>VectorGenerator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/VectorGeneratorPrimitives.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/VectorGeneratorPrimitives.html
index 52bd9e4..b2c8f4d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/VectorGeneratorPrimitives.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/VectorGeneratorPrimitives.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/VectorGeneratorPrimitives.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>VectorGeneratorPrimitives (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/VectorGeneratorsFamily.Builder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/VectorGeneratorsFamily.Builder.html
index b43d6ec..ec0d068 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/VectorGeneratorsFamily.Builder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/VectorGeneratorsFamily.Builder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/VectorGeneratorsFamily.Builder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>VectorGeneratorsFamily.Builder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/VectorGeneratorsFamily.VectorWithDistributionId.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/VectorGeneratorsFamily.VectorWithDistributionId.html
index 7461591..cdc47f0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/VectorGeneratorsFamily.VectorWithDistributionId.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/VectorGeneratorsFamily.VectorWithDistributionId.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/VectorGeneratorsFamily.VectorWithDistributionId.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>VectorGeneratorsFamily.VectorWithDistributionId (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/VectorGeneratorsFamily.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/VectorGeneratorsFamily.html
index c58e2ee..9318a57 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/VectorGeneratorsFamily.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/VectorGeneratorsFamily.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/VectorGeneratorsFamily.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>VectorGeneratorsFamily (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/class-use/ParametricVectorGenerator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/class-use/ParametricVectorGenerator.html
index 1991247..116e0d1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/class-use/ParametricVectorGenerator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/class-use/ParametricVectorGenerator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/class-use/ParametricVectorGenerator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.util.generators.primitives.vector.ParametricVectorGenerator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/class-use/VectorGenerator.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/class-use/VectorGenerator.html
index e30ad2a..3570126 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/class-use/VectorGenerator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/class-use/VectorGenerator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/class-use/VectorGenerator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.util.generators.primitives.vector.VectorGenerator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/class-use/VectorGeneratorPrimitives.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/class-use/VectorGeneratorPrimitives.html
index 84a3af5..125dc53 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/class-use/VectorGeneratorPrimitives.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/class-use/VectorGeneratorPrimitives.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/class-use/VectorGeneratorPrimitives.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.util.generators.primitives.vector.VectorGeneratorPrimitives (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/class-use/VectorGeneratorsFamily.Builder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/class-use/VectorGeneratorsFamily.Builder.html
index d89ef4c..00642f2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/class-use/VectorGeneratorsFamily.Builder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/class-use/VectorGeneratorsFamily.Builder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/class-use/VectorGeneratorsFamily.Builder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.util.generators.primitives.vector.VectorGeneratorsFamily.Builder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/class-use/VectorGeneratorsFamily.VectorWithDistributionId.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/class-use/VectorGeneratorsFamily.VectorWithDistributionId.html
index 23d5897..247629f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/class-use/VectorGeneratorsFamily.VectorWithDistributionId.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/class-use/VectorGeneratorsFamily.VectorWithDistributionId.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/class-use/VectorGeneratorsFamily.VectorWithDistributionId.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.util.generators.primitives.vector.VectorGeneratorsFamily.VectorWithDistributionId (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/class-use/VectorGeneratorsFamily.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/class-use/VectorGeneratorsFamily.html
index d52e32c..7265201 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/class-use/VectorGeneratorsFamily.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/class-use/VectorGeneratorsFamily.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/class-use/VectorGeneratorsFamily.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.util.generators.primitives.vector.VectorGeneratorsFamily (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/package-frame.html
index 05d9511..21f7350 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.util.generators.primitives.vector (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/package-summary.html
index 2e38280..bf78f86 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.util.generators.primitives.vector (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/package-tree.html
index 822f6fe..315a6fc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.util.generators.primitives.vector Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/package-use.html
index 1537e74..7a69999 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/primitives/vector/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.util.generators.primitives.vector (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/GaussianMixtureDataStream.Builder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/GaussianMixtureDataStream.Builder.html
index d272104..228ce2f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/GaussianMixtureDataStream.Builder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/GaussianMixtureDataStream.Builder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/standard/GaussianMixtureDataStream.Builder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GaussianMixtureDataStream.Builder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/GaussianMixtureDataStream.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/GaussianMixtureDataStream.html
index a0147c1..3d235ca 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/GaussianMixtureDataStream.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/GaussianMixtureDataStream.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/standard/GaussianMixtureDataStream.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GaussianMixtureDataStream (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/RegressionDataStream.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/RegressionDataStream.html
index 21cf5ed..cb6deed 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/RegressionDataStream.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/RegressionDataStream.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/standard/RegressionDataStream.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>RegressionDataStream (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/RingsDataStream.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/RingsDataStream.html
index f1f3bfb..353597a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/RingsDataStream.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/RingsDataStream.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/standard/RingsDataStream.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>RingsDataStream (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/TwoSeparableClassesDataStream.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/TwoSeparableClassesDataStream.html
index a41b11f..373d53d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/TwoSeparableClassesDataStream.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/TwoSeparableClassesDataStream.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/standard/TwoSeparableClassesDataStream.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TwoSeparableClassesDataStream (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/class-use/GaussianMixtureDataStream.Builder.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/class-use/GaussianMixtureDataStream.Builder.html
index 570c7a7..fd0d1dc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/class-use/GaussianMixtureDataStream.Builder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/class-use/GaussianMixtureDataStream.Builder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/standard/class-use/GaussianMixtureDataStream.Builder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.util.generators.standard.GaussianMixtureDataStream.Builder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/class-use/GaussianMixtureDataStream.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/class-use/GaussianMixtureDataStream.html
index d150709..1eae46f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/class-use/GaussianMixtureDataStream.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/class-use/GaussianMixtureDataStream.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/standard/class-use/GaussianMixtureDataStream.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.util.generators.standard.GaussianMixtureDataStream (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/class-use/RegressionDataStream.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/class-use/RegressionDataStream.html
index b8f1968..5409d34 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/class-use/RegressionDataStream.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/class-use/RegressionDataStream.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/standard/class-use/RegressionDataStream.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.util.generators.standard.RegressionDataStream (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/class-use/RingsDataStream.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/class-use/RingsDataStream.html
index c9293fa..5cdbbcd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/class-use/RingsDataStream.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/class-use/RingsDataStream.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/standard/class-use/RingsDataStream.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.util.generators.standard.RingsDataStream (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/class-use/TwoSeparableClassesDataStream.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/class-use/TwoSeparableClassesDataStream.html
index 8151d84..18eb5f7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/class-use/TwoSeparableClassesDataStream.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/class-use/TwoSeparableClassesDataStream.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/standard/class-use/TwoSeparableClassesDataStream.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.util.generators.standard.TwoSeparableClassesDataStream (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/package-frame.html
index 8a71131..438e617 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/standard/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.util.generators.standard (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/package-summary.html
index e6df023..6fdea33 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/standard/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.util.generators.standard (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/package-tree.html
index 9724ca1..3bd5536 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/standard/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.util.generators.standard Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/package-use.html
index b95c6ae..fa2a241 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/generators/standard/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/generators/standard/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.util.generators.standard (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/Chromosome.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/Chromosome.html
index 0d40e9a..0e2ad3b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/Chromosome.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/Chromosome.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/genetic/Chromosome.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Chromosome (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/CrossoverStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/CrossoverStrategy.html
index 3837ec6..bd2ae24 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/CrossoverStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/CrossoverStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/genetic/CrossoverStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CrossoverStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/GeneticAlgorithm.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/GeneticAlgorithm.html
index bdd1bf4..fb72625 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/GeneticAlgorithm.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/GeneticAlgorithm.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/genetic/GeneticAlgorithm.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GeneticAlgorithm (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/Population.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/Population.html
index 0a4e1cd..4ae30ec 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/Population.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/Population.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/genetic/Population.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Population (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/SelectionStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/SelectionStrategy.html
index 83f49fc..60f6bb4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/SelectionStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/SelectionStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/genetic/SelectionStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SelectionStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/class-use/Chromosome.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/class-use/Chromosome.html
index cf1b317..9fcfd93 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/class-use/Chromosome.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/class-use/Chromosome.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/genetic/class-use/Chromosome.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.util.genetic.Chromosome (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/class-use/CrossoverStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/class-use/CrossoverStrategy.html
index 37d0ad7..fbd7147 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/class-use/CrossoverStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/class-use/CrossoverStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/genetic/class-use/CrossoverStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.util.genetic.CrossoverStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/class-use/GeneticAlgorithm.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/class-use/GeneticAlgorithm.html
index cb3ccac..367aa26 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/class-use/GeneticAlgorithm.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/class-use/GeneticAlgorithm.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/genetic/class-use/GeneticAlgorithm.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.util.genetic.GeneticAlgorithm (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/class-use/Population.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/class-use/Population.html
index 6e15ed4..dbe6e73 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/class-use/Population.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/class-use/Population.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/genetic/class-use/Population.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.util.genetic.Population (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/class-use/SelectionStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/class-use/SelectionStrategy.html
index 06c4d81..0934d10 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/class-use/SelectionStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/class-use/SelectionStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/genetic/class-use/SelectionStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.util.genetic.SelectionStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/package-frame.html
index 6702bd6..8945066 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/genetic/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.util.genetic (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/package-summary.html
index 1dcda80..3b18531 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/genetic/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.util.genetic (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/package-tree.html
index d67349f..25393cd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/genetic/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.util.genetic Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/package-use.html
index 9975fab..24d5ea6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/genetic/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/genetic/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.util.genetic (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/package-frame.html
index 5290744..55964fd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.util (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/package-summary.html
index f82b86e..cfe1062 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.util (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/package-tree.html
index e268855..e26fc27 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.util Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/package-use.html
index 1d7f7b8..b0fabc4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.util (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/plugin/MLPluginConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/plugin/MLPluginConfiguration.html
index 64e0169..0733811 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/plugin/MLPluginConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/plugin/MLPluginConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/plugin/MLPluginConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MLPluginConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/plugin/MLPluginProvider.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/plugin/MLPluginProvider.html
index 6800184..7bb376a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/plugin/MLPluginProvider.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/plugin/MLPluginProvider.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/plugin/MLPluginProvider.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MLPluginProvider (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/plugin/class-use/MLPluginConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/plugin/class-use/MLPluginConfiguration.html
index 99f72fb..f7e099c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/plugin/class-use/MLPluginConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/plugin/class-use/MLPluginConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/plugin/class-use/MLPluginConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.util.plugin.MLPluginConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/plugin/class-use/MLPluginProvider.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/plugin/class-use/MLPluginProvider.html
index abb1072..416d9e8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/plugin/class-use/MLPluginProvider.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/plugin/class-use/MLPluginProvider.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/plugin/class-use/MLPluginProvider.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.util.plugin.MLPluginProvider (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/plugin/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/plugin/package-frame.html
index 985ee97..19f0c58 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/plugin/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/plugin/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/plugin/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.util.plugin (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/plugin/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/plugin/package-summary.html
index 3993205..ad79924 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/plugin/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/plugin/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/plugin/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.util.plugin (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/plugin/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/plugin/package-tree.html
index f9eaf72..c58f03a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/plugin/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/plugin/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/plugin/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.util.plugin Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/plugin/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/plugin/package-use.html
index 845c94e..6a75efd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/util/plugin/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/util/plugin/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/util/plugin/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.util.plugin (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/XGModelComposition.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/XGModelComposition.html
index dffcaeb..c68c003 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/XGModelComposition.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/XGModelComposition.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/XGModelComposition.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>XGModelComposition (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/class-use/XGModelComposition.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/class-use/XGModelComposition.html
index b1be8f3..e0d974a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/class-use/XGModelComposition.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/class-use/XGModelComposition.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/class-use/XGModelComposition.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.xgboost.XGModelComposition (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/package-frame.html
index df9e91a..314f618 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.xgboost (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/package-summary.html
index 2fa6ad3..f1e25f1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.xgboost (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/package-tree.html
index af8e31a..29be947 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.xgboost Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/package-use.html
index 0dcbbf2..c72e17f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.xgboost (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelBaseVisitor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelBaseVisitor.html
index 926ce62..2ecfee4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelBaseVisitor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelBaseVisitor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelBaseVisitor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>XGBoostModelBaseVisitor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelLexer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelLexer.html
index 5637590..583d699 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelLexer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelLexer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelLexer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>XGBoostModelLexer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelListener.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelListener.html
index 6f622fd..24ccc97 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelListener.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelListener.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelListener.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>XGBoostModelListener (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.XgHeaderContext.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.XgHeaderContext.html
index f5d7fb5..41f6df6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.XgHeaderContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.XgHeaderContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.XgHeaderContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>XGBoostModelParser.XgHeaderContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.XgLeafContext.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.XgLeafContext.html
index 14e3fb5..275be02 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.XgLeafContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.XgLeafContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.XgLeafContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>XGBoostModelParser.XgLeafContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.XgModelContext.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.XgModelContext.html
index 4698966..297cbb7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.XgModelContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.XgModelContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.XgModelContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>XGBoostModelParser.XgModelContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.XgNodeContext.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.XgNodeContext.html
index 02f155c..fe76454 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.XgNodeContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.XgNodeContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.XgNodeContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>XGBoostModelParser.XgNodeContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.XgTreeContext.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.XgTreeContext.html
index 5296ec5..7ef8b43 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.XgTreeContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.XgTreeContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.XgTreeContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>XGBoostModelParser.XgTreeContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.XgValueContext.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.XgValueContext.html
index 21ab3c6..c93d68d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.XgValueContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.XgValueContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.XgValueContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>XGBoostModelParser.XgValueContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.html
index 6be136e..d9110ee 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>XGBoostModelParser (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelVisitor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelVisitor.html
index 5d19d88..ef3a40c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelVisitor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelVisitor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/XGBoostModelVisitor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>XGBoostModelVisitor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGModelParser.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGModelParser.html
index 7b6edac..f94a1dd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGModelParser.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/XGModelParser.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/XGModelParser.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>XGModelParser (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelBaseVisitor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelBaseVisitor.html
index ec0f3b6..192e1fc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelBaseVisitor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelBaseVisitor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelBaseVisitor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.xgboost.parser.XGBoostModelBaseVisitor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelLexer.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelLexer.html
index 8948262..61ce001 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelLexer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelLexer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelLexer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.xgboost.parser.XGBoostModelLexer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelListener.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelListener.html
index b323dd9..df1136d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelListener.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelListener.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelListener.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.xgboost.parser.XGBoostModelListener (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelParser.XgHeaderContext.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelParser.XgHeaderContext.html
index 707c3aa..8f7ed79 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelParser.XgHeaderContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelParser.XgHeaderContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelParser.XgHeaderContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.xgboost.parser.XGBoostModelParser.XgHeaderContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelParser.XgLeafContext.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelParser.XgLeafContext.html
index d9d6935..2a865f8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelParser.XgLeafContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelParser.XgLeafContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelParser.XgLeafContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.xgboost.parser.XGBoostModelParser.XgLeafContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelParser.XgModelContext.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelParser.XgModelContext.html
index c602409..18fa77d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelParser.XgModelContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelParser.XgModelContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelParser.XgModelContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.xgboost.parser.XGBoostModelParser.XgModelContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelParser.XgNodeContext.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelParser.XgNodeContext.html
index b8df72a..09afecf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelParser.XgNodeContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelParser.XgNodeContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelParser.XgNodeContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.xgboost.parser.XGBoostModelParser.XgNodeContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelParser.XgTreeContext.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelParser.XgTreeContext.html
index 094abef..232f662 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelParser.XgTreeContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelParser.XgTreeContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelParser.XgTreeContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.xgboost.parser.XGBoostModelParser.XgTreeContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelParser.XgValueContext.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelParser.XgValueContext.html
index ab8010f..c12ff5a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelParser.XgValueContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelParser.XgValueContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelParser.XgValueContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.xgboost.parser.XGBoostModelParser.XgValueContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelParser.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelParser.html
index 7c97501..501e7dc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelParser.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelParser.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelParser.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.xgboost.parser.XGBoostModelParser (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelVisitor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelVisitor.html
index dc52a24..239522d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelVisitor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelVisitor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGBoostModelVisitor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.ml.xgboost.parser.XGBoostModelVisitor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGModelParser.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGModelParser.html
index 68643f2..7e125c8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGModelParser.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGModelParser.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/class-use/XGModelParser.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.xgboost.parser.XGModelParser (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/package-frame.html
index 0a4387f..c818998 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.xgboost.parser (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/package-summary.html
index 234426a..b0ce1a5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.xgboost.parser (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/package-tree.html
index 011b93f..a1e8d9c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.xgboost.parser Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/package-use.html
index 9be13d9..8837a01 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.xgboost.parser (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/XGModelVisitor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/XGModelVisitor.html
index 38ac59d..6154740 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/XGModelVisitor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/XGModelVisitor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/XGModelVisitor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>XGModelVisitor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/XGTreeDictionaryVisitor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/XGTreeDictionaryVisitor.html
index b5eb64e..43d1af0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/XGTreeDictionaryVisitor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/XGTreeDictionaryVisitor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/XGTreeDictionaryVisitor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>XGTreeDictionaryVisitor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/XGTreeVisitor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/XGTreeVisitor.html
index 03f1c21..baba831 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/XGTreeVisitor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/XGTreeVisitor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/XGTreeVisitor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>XGTreeVisitor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/class-use/XGModelVisitor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/class-use/XGModelVisitor.html
index bac2794..3ac787f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/class-use/XGModelVisitor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/class-use/XGModelVisitor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/class-use/XGModelVisitor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.xgboost.parser.visitor.XGModelVisitor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/class-use/XGTreeDictionaryVisitor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/class-use/XGTreeDictionaryVisitor.html
index ded2564..d543ea1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/class-use/XGTreeDictionaryVisitor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/class-use/XGTreeDictionaryVisitor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/class-use/XGTreeDictionaryVisitor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.xgboost.parser.visitor.XGTreeDictionaryVisitor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/class-use/XGTreeVisitor.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/class-use/XGTreeVisitor.html
index 675b657..e2cc44f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/class-use/XGTreeVisitor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/class-use/XGTreeVisitor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/class-use/XGTreeVisitor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ml.xgboost.parser.visitor.XGTreeVisitor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/package-frame.html
index 6593771..07abe50 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.xgboost.parser.visitor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/package-summary.html
index 73653e2..9822412 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.xgboost.parser.visitor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/package-tree.html
index 6f84c10..022bff7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ml.xgboost.parser.visitor Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/package-use.html
index 9fa1724..361562e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ml/xgboost/parser/visitor/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ml.xgboost.parser.visitor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/BaselineAutoAdjustMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/BaselineAutoAdjustMXBean.html
index 575d03c..42b860e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/BaselineAutoAdjustMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/BaselineAutoAdjustMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/BaselineAutoAdjustMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:04 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BaselineAutoAdjustMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/CacheGroupMetricsMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/CacheGroupMetricsMXBean.html
index 34e1fdf..2ada4f1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/CacheGroupMetricsMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/CacheGroupMetricsMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/CacheGroupMetricsMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:04 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheGroupMetricsMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/CacheMetricsMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/CacheMetricsMXBean.html
index 25b42b9..664e68b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/CacheMetricsMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/CacheMetricsMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/CacheMetricsMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheMetricsMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/ClientProcessorMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/ClientProcessorMXBean.html
index 3999233..bc5de5c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/ClientProcessorMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/ClientProcessorMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/ClientProcessorMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClientProcessorMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/ClusterMetricsMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/ClusterMetricsMXBean.html
index ce67019..5f653cf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/ClusterMetricsMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/ClusterMetricsMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/ClusterMetricsMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClusterMetricsMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/ComputeMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/ComputeMXBean.html
index 4c12f42..54259b4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/ComputeMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/ComputeMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/ComputeMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ComputeMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/DataRegionMetricsMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/DataRegionMetricsMXBean.html
index 337b4c0..5557707 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/DataRegionMetricsMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/DataRegionMetricsMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/DataRegionMetricsMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DataRegionMetricsMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/DataStorageMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/DataStorageMXBean.html
index 6e1414e..31666a1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/DataStorageMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/DataStorageMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/DataStorageMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DataStorageMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/DataStorageMetricsMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/DataStorageMetricsMXBean.html
index 78a2ed8..6d1de1e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/DataStorageMetricsMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/DataStorageMetricsMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/DataStorageMetricsMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DataStorageMetricsMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/EncryptionMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/EncryptionMXBean.html
index 3261f68..562c97a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/EncryptionMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/EncryptionMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/EncryptionMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>EncryptionMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/FailureHandlingMxBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/FailureHandlingMxBean.html
index 9cb5dcf..c5cbd29 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/FailureHandlingMxBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/FailureHandlingMxBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/FailureHandlingMxBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>FailureHandlingMxBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/IgniteClusterMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/IgniteClusterMXBean.html
index a0fc5ca..57a51c9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/IgniteClusterMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/IgniteClusterMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/IgniteClusterMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteClusterMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/IgniteMBeanAware.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/IgniteMBeanAware.html
index afd6ea4..03049bb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/IgniteMBeanAware.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/IgniteMBeanAware.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/IgniteMBeanAware.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteMBeanAware (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/IgniteMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/IgniteMXBean.html
index f0f4247..a57042e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/IgniteMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/IgniteMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/IgniteMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/IgnitionMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/IgnitionMXBean.html
index 2402945..2348075 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/IgnitionMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/IgnitionMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/IgnitionMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgnitionMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/MXBeanDescription.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/MXBeanDescription.html
index 619e7f9..649e0a1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/MXBeanDescription.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/MXBeanDescription.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/MXBeanDescription.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MXBeanDescription (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/MXBeanParameter.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/MXBeanParameter.html
index 8c8b546..0561bdc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/MXBeanParameter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/MXBeanParameter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/MXBeanParameter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MXBeanParameter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/MXBeanParametersDescriptions.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/MXBeanParametersDescriptions.html
index cbf96c1..229bc37 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/MXBeanParametersDescriptions.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/MXBeanParametersDescriptions.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/MXBeanParametersDescriptions.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MXBeanParametersDescriptions (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/MXBeanParametersNames.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/MXBeanParametersNames.html
index a4e0759..dc5bfe6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/MXBeanParametersNames.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/MXBeanParametersNames.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/MXBeanParametersNames.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MXBeanParametersNames (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/MemoryMetricsMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/MemoryMetricsMXBean.html
index 4d1c7f6..c5a1284 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/MemoryMetricsMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/MemoryMetricsMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/MemoryMetricsMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MemoryMetricsMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/MetricsMxBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/MetricsMxBean.html
index 511832a..745cb4a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/MetricsMxBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/MetricsMxBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/MetricsMxBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MetricsMxBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/PersistenceMetricsMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/PersistenceMetricsMXBean.html
index 7b8dd40..2e7f49f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/PersistenceMetricsMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/PersistenceMetricsMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/PersistenceMetricsMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PersistenceMetricsMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/QueryMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/QueryMXBean.html
index 6c858e4..351ab2e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/QueryMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/QueryMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/QueryMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>QueryMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/ServiceMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/ServiceMXBean.html
index fef4fe9..98567c6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/ServiceMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/ServiceMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/ServiceMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ServiceMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/SnapshotMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/SnapshotMXBean.html
index aad4fa4..acce498 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/SnapshotMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/SnapshotMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/SnapshotMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SnapshotMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/StripedExecutorMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/StripedExecutorMXBean.html
index ad4c9e8..a4222d1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/StripedExecutorMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/StripedExecutorMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/StripedExecutorMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>StripedExecutorMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/ThreadPoolMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/ThreadPoolMXBean.html
index 59d01de..8e48f68 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/ThreadPoolMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/ThreadPoolMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/ThreadPoolMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ThreadPoolMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/TransactionMetricsMxBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/TransactionMetricsMxBean.html
index e9fad98..198886d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/TransactionMetricsMxBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/TransactionMetricsMxBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/TransactionMetricsMxBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TransactionMetricsMxBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/TransactionsMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/TransactionsMXBean.html
index bc3f348..b5046a5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/TransactionsMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/TransactionsMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/TransactionsMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TransactionsMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/WorkersControlMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/WorkersControlMXBean.html
index 7e1faaf..2e39d1d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/WorkersControlMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/WorkersControlMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/WorkersControlMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:05 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>WorkersControlMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/BaselineAutoAdjustMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/BaselineAutoAdjustMXBean.html
index c0d5025..0a6e61a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/BaselineAutoAdjustMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/BaselineAutoAdjustMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/class-use/BaselineAutoAdjustMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.mxbean.BaselineAutoAdjustMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/CacheGroupMetricsMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/CacheGroupMetricsMXBean.html
index e174609..04f945d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/CacheGroupMetricsMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/CacheGroupMetricsMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/class-use/CacheGroupMetricsMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.mxbean.CacheGroupMetricsMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/CacheMetricsMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/CacheMetricsMXBean.html
index ef5ded3..4b76697 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/CacheMetricsMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/CacheMetricsMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/class-use/CacheMetricsMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.mxbean.CacheMetricsMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/ClientProcessorMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/ClientProcessorMXBean.html
index fe92eb2..7d1e5ef 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/ClientProcessorMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/ClientProcessorMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/class-use/ClientProcessorMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.mxbean.ClientProcessorMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/ClusterMetricsMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/ClusterMetricsMXBean.html
index a6feb9f..0956d5f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/ClusterMetricsMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/ClusterMetricsMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/class-use/ClusterMetricsMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.mxbean.ClusterMetricsMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/ComputeMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/ComputeMXBean.html
index 9c66bb7..ac31e2d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/ComputeMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/ComputeMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/class-use/ComputeMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.mxbean.ComputeMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/DataRegionMetricsMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/DataRegionMetricsMXBean.html
index 8c19e77..ae82ccf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/DataRegionMetricsMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/DataRegionMetricsMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/class-use/DataRegionMetricsMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.mxbean.DataRegionMetricsMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/DataStorageMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/DataStorageMXBean.html
index 7506ae1..2e90de1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/DataStorageMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/DataStorageMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/class-use/DataStorageMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.mxbean.DataStorageMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/DataStorageMetricsMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/DataStorageMetricsMXBean.html
index bf99aff..93a76c9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/DataStorageMetricsMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/DataStorageMetricsMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/class-use/DataStorageMetricsMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.mxbean.DataStorageMetricsMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/EncryptionMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/EncryptionMXBean.html
index ad0aac4..bf7faf2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/EncryptionMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/EncryptionMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/class-use/EncryptionMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.mxbean.EncryptionMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/FailureHandlingMxBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/FailureHandlingMxBean.html
index da47964..9481f79 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/FailureHandlingMxBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/FailureHandlingMxBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/class-use/FailureHandlingMxBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.mxbean.FailureHandlingMxBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/IgniteClusterMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/IgniteClusterMXBean.html
index 72981b9..aaeea78 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/IgniteClusterMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/IgniteClusterMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/class-use/IgniteClusterMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.mxbean.IgniteClusterMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/IgniteMBeanAware.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/IgniteMBeanAware.html
index 8efead0..0c33d53 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/IgniteMBeanAware.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/IgniteMBeanAware.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/class-use/IgniteMBeanAware.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.mxbean.IgniteMBeanAware (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/IgniteMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/IgniteMXBean.html
index 53d63a1..cd4b347 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/IgniteMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/IgniteMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/class-use/IgniteMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.mxbean.IgniteMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/IgnitionMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/IgnitionMXBean.html
index 0437877..1f98385 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/IgnitionMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/IgnitionMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/class-use/IgnitionMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.mxbean.IgnitionMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/MXBeanDescription.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/MXBeanDescription.html
index dbef30e..e81fa70 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/MXBeanDescription.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/MXBeanDescription.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/class-use/MXBeanDescription.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.mxbean.MXBeanDescription (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/MXBeanParameter.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/MXBeanParameter.html
index b67994c..f205cdb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/MXBeanParameter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/MXBeanParameter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/class-use/MXBeanParameter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.mxbean.MXBeanParameter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/MXBeanParametersDescriptions.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/MXBeanParametersDescriptions.html
index f241dff..ad1bca6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/MXBeanParametersDescriptions.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/MXBeanParametersDescriptions.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/class-use/MXBeanParametersDescriptions.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.mxbean.MXBeanParametersDescriptions (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/MXBeanParametersNames.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/MXBeanParametersNames.html
index c18b281..a5e7069 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/MXBeanParametersNames.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/MXBeanParametersNames.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/class-use/MXBeanParametersNames.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.mxbean.MXBeanParametersNames (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/MemoryMetricsMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/MemoryMetricsMXBean.html
index 6f1671b..caf2c1b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/MemoryMetricsMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/MemoryMetricsMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/class-use/MemoryMetricsMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.mxbean.MemoryMetricsMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/MetricsMxBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/MetricsMxBean.html
index 4e18274..b76948e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/MetricsMxBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/MetricsMxBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/class-use/MetricsMxBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.mxbean.MetricsMxBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/PersistenceMetricsMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/PersistenceMetricsMXBean.html
index 997bc63..1711671 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/PersistenceMetricsMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/PersistenceMetricsMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/class-use/PersistenceMetricsMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.mxbean.PersistenceMetricsMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/QueryMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/QueryMXBean.html
index b9c4079..2d76bf2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/QueryMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/QueryMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/class-use/QueryMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.mxbean.QueryMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/ServiceMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/ServiceMXBean.html
index 6e35ce0..e27676b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/ServiceMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/ServiceMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/class-use/ServiceMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.mxbean.ServiceMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/SnapshotMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/SnapshotMXBean.html
index 28377be..e1ad48e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/SnapshotMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/SnapshotMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/class-use/SnapshotMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.mxbean.SnapshotMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/StripedExecutorMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/StripedExecutorMXBean.html
index 97cc458..738b7d3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/StripedExecutorMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/StripedExecutorMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/class-use/StripedExecutorMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.mxbean.StripedExecutorMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/ThreadPoolMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/ThreadPoolMXBean.html
index 71a8133..92b3c10 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/ThreadPoolMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/ThreadPoolMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/class-use/ThreadPoolMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.mxbean.ThreadPoolMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/TransactionMetricsMxBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/TransactionMetricsMxBean.html
index f658277..d65d6bc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/TransactionMetricsMxBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/TransactionMetricsMxBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/class-use/TransactionMetricsMxBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.mxbean.TransactionMetricsMxBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/TransactionsMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/TransactionsMXBean.html
index 698f597..8e03516 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/TransactionsMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/TransactionsMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/class-use/TransactionsMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.mxbean.TransactionsMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/WorkersControlMXBean.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/WorkersControlMXBean.html
index ff275bb..aa97e35 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/WorkersControlMXBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/class-use/WorkersControlMXBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/class-use/WorkersControlMXBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.mxbean.WorkersControlMXBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/package-frame.html
index 2b81a5a..dcae0b9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.mxbean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/package-summary.html
index ca4a78b..72d5456 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.mxbean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/package-tree.html
index aa66f89..908c727 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.mxbean Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/package-use.html
index 0e8f8bb..a0ce58c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/mxbean/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/mxbean/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/mxbean/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.mxbean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/osgi/IgniteAbstractOsgiContextActivator.html b/releases/2.9.1/javadoc/org/apache/ignite/osgi/IgniteAbstractOsgiContextActivator.html
index 28ea054..dc5079a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/osgi/IgniteAbstractOsgiContextActivator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/osgi/IgniteAbstractOsgiContextActivator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/osgi/IgniteAbstractOsgiContextActivator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteAbstractOsgiContextActivator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/osgi/IgniteOsgiUtils.html b/releases/2.9.1/javadoc/org/apache/ignite/osgi/IgniteOsgiUtils.html
index e205197..62cf4c3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/osgi/IgniteOsgiUtils.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/osgi/IgniteOsgiUtils.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/osgi/IgniteOsgiUtils.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteOsgiUtils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/osgi/class-use/IgniteAbstractOsgiContextActivator.html b/releases/2.9.1/javadoc/org/apache/ignite/osgi/class-use/IgniteAbstractOsgiContextActivator.html
index 32f6eb6..b34b88e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/osgi/class-use/IgniteAbstractOsgiContextActivator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/osgi/class-use/IgniteAbstractOsgiContextActivator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/osgi/class-use/IgniteAbstractOsgiContextActivator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.osgi.IgniteAbstractOsgiContextActivator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/osgi/class-use/IgniteOsgiUtils.html b/releases/2.9.1/javadoc/org/apache/ignite/osgi/class-use/IgniteOsgiUtils.html
index 267af7b..c24979b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/osgi/class-use/IgniteOsgiUtils.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/osgi/class-use/IgniteOsgiUtils.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/osgi/class-use/IgniteOsgiUtils.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.osgi.IgniteOsgiUtils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/BundleDelegatingClassLoader.html b/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/BundleDelegatingClassLoader.html
index 0153737..c8bcb77 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/BundleDelegatingClassLoader.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/BundleDelegatingClassLoader.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/osgi/classloaders/BundleDelegatingClassLoader.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BundleDelegatingClassLoader (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/ContainerSweepClassLoader.html b/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/ContainerSweepClassLoader.html
index 5a5630e..3eacadb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/ContainerSweepClassLoader.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/ContainerSweepClassLoader.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/osgi/classloaders/ContainerSweepClassLoader.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ContainerSweepClassLoader (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/OsgiClassLoadingStrategyType.html b/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/OsgiClassLoadingStrategyType.html
index 6381f89..1a3d112 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/OsgiClassLoadingStrategyType.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/OsgiClassLoadingStrategyType.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/osgi/classloaders/OsgiClassLoadingStrategyType.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>OsgiClassLoadingStrategyType (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/class-use/BundleDelegatingClassLoader.html b/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/class-use/BundleDelegatingClassLoader.html
index d1509be..3d2e8f1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/class-use/BundleDelegatingClassLoader.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/class-use/BundleDelegatingClassLoader.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/osgi/classloaders/class-use/BundleDelegatingClassLoader.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.osgi.classloaders.BundleDelegatingClassLoader (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/class-use/ContainerSweepClassLoader.html b/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/class-use/ContainerSweepClassLoader.html
index 852cb3e..b006aa2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/class-use/ContainerSweepClassLoader.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/class-use/ContainerSweepClassLoader.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/osgi/classloaders/class-use/ContainerSweepClassLoader.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.osgi.classloaders.ContainerSweepClassLoader (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/class-use/OsgiClassLoadingStrategyType.html b/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/class-use/OsgiClassLoadingStrategyType.html
index d2a7e0c..826a4bf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/class-use/OsgiClassLoadingStrategyType.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/class-use/OsgiClassLoadingStrategyType.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/osgi/classloaders/class-use/OsgiClassLoadingStrategyType.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.osgi.classloaders.OsgiClassLoadingStrategyType (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/package-frame.html
index 4271903..23a8c98 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/osgi/classloaders/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.osgi.classloaders (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/package-summary.html
index 96f204f..1cb499c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/osgi/classloaders/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.osgi.classloaders (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/package-tree.html
index 33335b5..868010a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/osgi/classloaders/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.osgi.classloaders Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/package-use.html
index a3a5539..9015e2e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/osgi/classloaders/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/osgi/classloaders/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.osgi.classloaders (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/osgi/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/osgi/package-frame.html
index 11a34de..968b274 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/osgi/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/osgi/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/osgi/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.osgi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/osgi/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/osgi/package-summary.html
index e0db016..beec506 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/osgi/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/osgi/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/osgi/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.osgi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/osgi/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/osgi/package-tree.html
index 145c174..b950bea 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/osgi/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/osgi/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/osgi/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.osgi Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/osgi/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/osgi/package-use.html
index 830a177..1fedc99 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/osgi/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/osgi/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/osgi/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.osgi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/package-frame.html
index 31fcaf6..243b5ec 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/package-summary.html
index e78bc9f..c1e9590 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/package-tree.html
index aeb49a1..7ecb5b4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/package-use.html
index 325adec..c5a6a02 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/platform/PlatformJavaObjectFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/platform/PlatformJavaObjectFactory.html
index c812594..16b74c6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/platform/PlatformJavaObjectFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/platform/PlatformJavaObjectFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/platform/PlatformJavaObjectFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PlatformJavaObjectFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/platform/PlatformServiceMethod.html b/releases/2.9.1/javadoc/org/apache/ignite/platform/PlatformServiceMethod.html
index bcbc825..26ed3e0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/platform/PlatformServiceMethod.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/platform/PlatformServiceMethod.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/platform/PlatformServiceMethod.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PlatformServiceMethod (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/platform/class-use/PlatformJavaObjectFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/platform/class-use/PlatformJavaObjectFactory.html
index a246c68..2fc269e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/platform/class-use/PlatformJavaObjectFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/platform/class-use/PlatformJavaObjectFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/platform/class-use/PlatformJavaObjectFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.platform.PlatformJavaObjectFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/platform/class-use/PlatformServiceMethod.html b/releases/2.9.1/javadoc/org/apache/ignite/platform/class-use/PlatformServiceMethod.html
index 551fa0c..059a9e3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/platform/class-use/PlatformServiceMethod.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/platform/class-use/PlatformServiceMethod.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/platform/class-use/PlatformServiceMethod.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.platform.PlatformServiceMethod (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/platform/cpp/PlatformCppConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/platform/cpp/PlatformCppConfiguration.html
index 3aca33f..430ed91 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/platform/cpp/PlatformCppConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/platform/cpp/PlatformCppConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/platform/cpp/PlatformCppConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PlatformCppConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/platform/cpp/class-use/PlatformCppConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/platform/cpp/class-use/PlatformCppConfiguration.html
index 0405034..3dab861 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/platform/cpp/class-use/PlatformCppConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/platform/cpp/class-use/PlatformCppConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/platform/cpp/class-use/PlatformCppConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.platform.cpp.PlatformCppConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/platform/cpp/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/platform/cpp/package-frame.html
index 7bebb8e..870f999 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/platform/cpp/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/platform/cpp/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/platform/cpp/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.platform.cpp (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/platform/cpp/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/platform/cpp/package-summary.html
index d40c036..4302604 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/platform/cpp/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/platform/cpp/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/platform/cpp/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.platform.cpp (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/platform/cpp/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/platform/cpp/package-tree.html
index a983a92..c163600 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/platform/cpp/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/platform/cpp/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/platform/cpp/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.platform.cpp Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/platform/cpp/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/platform/cpp/package-use.html
index e3b165e..bd1086a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/platform/cpp/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/platform/cpp/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/platform/cpp/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.platform.cpp (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/PlatformDotNetAffinityFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/PlatformDotNetAffinityFunction.html
index c5d8fc8..7b2cb36 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/PlatformDotNetAffinityFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/PlatformDotNetAffinityFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/platform/dotnet/PlatformDotNetAffinityFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PlatformDotNetAffinityFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/PlatformDotNetBinaryConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/PlatformDotNetBinaryConfiguration.html
index 7499538..b67cd7c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/PlatformDotNetBinaryConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/PlatformDotNetBinaryConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/platform/dotnet/PlatformDotNetBinaryConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PlatformDotNetBinaryConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/PlatformDotNetBinaryTypeConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/PlatformDotNetBinaryTypeConfiguration.html
index f5359a6..8be46a8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/PlatformDotNetBinaryTypeConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/PlatformDotNetBinaryTypeConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/platform/dotnet/PlatformDotNetBinaryTypeConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PlatformDotNetBinaryTypeConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/PlatformDotNetCacheStoreFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/PlatformDotNetCacheStoreFactory.html
index 9cef776..6413bba 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/PlatformDotNetCacheStoreFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/PlatformDotNetCacheStoreFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/platform/dotnet/PlatformDotNetCacheStoreFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PlatformDotNetCacheStoreFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/PlatformDotNetCacheStoreFactoryNative.html b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/PlatformDotNetCacheStoreFactoryNative.html
index 3e80cea..4c1c2a3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/PlatformDotNetCacheStoreFactoryNative.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/PlatformDotNetCacheStoreFactoryNative.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/platform/dotnet/PlatformDotNetCacheStoreFactoryNative.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PlatformDotNetCacheStoreFactoryNative (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/PlatformDotNetConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/PlatformDotNetConfiguration.html
index 04b8885..3f3c69e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/PlatformDotNetConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/PlatformDotNetConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/platform/dotnet/PlatformDotNetConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PlatformDotNetConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/PlatformDotNetLifecycleBean.html b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/PlatformDotNetLifecycleBean.html
index 56d184c..95990a5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/PlatformDotNetLifecycleBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/PlatformDotNetLifecycleBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/platform/dotnet/PlatformDotNetLifecycleBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PlatformDotNetLifecycleBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/class-use/PlatformDotNetAffinityFunction.html b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/class-use/PlatformDotNetAffinityFunction.html
index feab697..43947e7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/class-use/PlatformDotNetAffinityFunction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/class-use/PlatformDotNetAffinityFunction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/platform/dotnet/class-use/PlatformDotNetAffinityFunction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.platform.dotnet.PlatformDotNetAffinityFunction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/class-use/PlatformDotNetBinaryConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/class-use/PlatformDotNetBinaryConfiguration.html
index b1a6b4f..ccfe096 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/class-use/PlatformDotNetBinaryConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/class-use/PlatformDotNetBinaryConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/platform/dotnet/class-use/PlatformDotNetBinaryConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.platform.dotnet.PlatformDotNetBinaryConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/class-use/PlatformDotNetBinaryTypeConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/class-use/PlatformDotNetBinaryTypeConfiguration.html
index 9006854..55173b3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/class-use/PlatformDotNetBinaryTypeConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/class-use/PlatformDotNetBinaryTypeConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/platform/dotnet/class-use/PlatformDotNetBinaryTypeConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.platform.dotnet.PlatformDotNetBinaryTypeConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/class-use/PlatformDotNetCacheStoreFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/class-use/PlatformDotNetCacheStoreFactory.html
index 0b54e8c..8de1226 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/class-use/PlatformDotNetCacheStoreFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/class-use/PlatformDotNetCacheStoreFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/platform/dotnet/class-use/PlatformDotNetCacheStoreFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.platform.dotnet.PlatformDotNetCacheStoreFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/class-use/PlatformDotNetCacheStoreFactoryNative.html b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/class-use/PlatformDotNetCacheStoreFactoryNative.html
index 63e1461..cb76c7b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/class-use/PlatformDotNetCacheStoreFactoryNative.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/class-use/PlatformDotNetCacheStoreFactoryNative.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/platform/dotnet/class-use/PlatformDotNetCacheStoreFactoryNative.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.platform.dotnet.PlatformDotNetCacheStoreFactoryNative (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/class-use/PlatformDotNetConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/class-use/PlatformDotNetConfiguration.html
index b6e9177..1a3b5e7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/class-use/PlatformDotNetConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/class-use/PlatformDotNetConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/platform/dotnet/class-use/PlatformDotNetConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.platform.dotnet.PlatformDotNetConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/class-use/PlatformDotNetLifecycleBean.html b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/class-use/PlatformDotNetLifecycleBean.html
index 53c62aa..1d4940f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/class-use/PlatformDotNetLifecycleBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/class-use/PlatformDotNetLifecycleBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/platform/dotnet/class-use/PlatformDotNetLifecycleBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.platform.dotnet.PlatformDotNetLifecycleBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/package-frame.html
index 980909c..b2d18e2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/platform/dotnet/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.platform.dotnet (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/package-summary.html
index 9f5fff9..ca448a5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/platform/dotnet/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.platform.dotnet (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/package-tree.html
index 96bf51b..0585b8b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/platform/dotnet/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.platform.dotnet Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/package-use.html
index b065b60..fa117df 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/platform/dotnet/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/platform/dotnet/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.platform.dotnet (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/platform/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/platform/package-frame.html
index 5e5a44f..c4a250e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/platform/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/platform/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/platform/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.platform (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/platform/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/platform/package-summary.html
index 99ffbea..a943beb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/platform/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/platform/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/platform/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.platform (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/platform/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/platform/package-tree.html
index 8bb49ab..4acaf68 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/platform/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/platform/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/platform/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.platform Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/platform/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/platform/package-use.html
index fe3a390..6bf2593 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/platform/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/platform/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/platform/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.platform (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/CachePluginConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/CachePluginConfiguration.html
index 839337b..cf50d5f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/CachePluginConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/CachePluginConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/CachePluginConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CachePluginConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/CachePluginContext.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/CachePluginContext.html
index 498064e..afe60b9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/CachePluginContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/CachePluginContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/CachePluginContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CachePluginContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/CachePluginProvider.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/CachePluginProvider.html
index bbded09..07db914 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/CachePluginProvider.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/CachePluginProvider.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/CachePluginProvider.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CachePluginProvider (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/Extension.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/Extension.html
index a53a9e9..13d2747 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/Extension.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/Extension.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/Extension.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Extension (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/ExtensionRegistry.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/ExtensionRegistry.html
index 46a76ff..fe39d36 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/ExtensionRegistry.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/ExtensionRegistry.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/ExtensionRegistry.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ExtensionRegistry (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/IgnitePlugin.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/IgnitePlugin.html
index 9dd8a58..d987c68 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/IgnitePlugin.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/IgnitePlugin.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/IgnitePlugin.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgnitePlugin (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/PluginConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/PluginConfiguration.html
index 757f9fd..852ccb8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/PluginConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/PluginConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/PluginConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PluginConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/PluginContext.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/PluginContext.html
index 3bf72e5..ede59a2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/PluginContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/PluginContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/PluginContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PluginContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/PluginNotFoundException.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/PluginNotFoundException.html
index d4826bf..0aa86d9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/PluginNotFoundException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/PluginNotFoundException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/PluginNotFoundException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PluginNotFoundException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/PluginProvider.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/PluginProvider.html
index f2d6f66..9edcc8d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/PluginProvider.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/PluginProvider.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/PluginProvider.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PluginProvider (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/PluginValidationException.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/PluginValidationException.html
index 6cad3fb..22dd88c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/PluginValidationException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/PluginValidationException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/PluginValidationException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PluginValidationException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/CachePluginConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/CachePluginConfiguration.html
index be77ccd..8368b53 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/CachePluginConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/CachePluginConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/class-use/CachePluginConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.plugin.CachePluginConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/CachePluginContext.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/CachePluginContext.html
index 8d7817a..801cd93 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/CachePluginContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/CachePluginContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/class-use/CachePluginContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.plugin.CachePluginContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/CachePluginProvider.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/CachePluginProvider.html
index 04ef7bb..57d19ae 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/CachePluginProvider.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/CachePluginProvider.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/class-use/CachePluginProvider.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.plugin.CachePluginProvider (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/Extension.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/Extension.html
index 43e5ace..cb6781e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/Extension.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/Extension.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/class-use/Extension.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.plugin.Extension (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/ExtensionRegistry.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/ExtensionRegistry.html
index fdf7ac4..4c2a6c0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/ExtensionRegistry.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/ExtensionRegistry.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/class-use/ExtensionRegistry.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.plugin.ExtensionRegistry (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/IgnitePlugin.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/IgnitePlugin.html
index 5fe8b5e..9fb0dd0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/IgnitePlugin.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/IgnitePlugin.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/class-use/IgnitePlugin.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.plugin.IgnitePlugin (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/PluginConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/PluginConfiguration.html
index eb6c1bb..93d9a48 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/PluginConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/PluginConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/class-use/PluginConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.plugin.PluginConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/PluginContext.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/PluginContext.html
index 6531463..4ec3997 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/PluginContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/PluginContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/class-use/PluginContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.plugin.PluginContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/PluginNotFoundException.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/PluginNotFoundException.html
index ee71c20..58194e1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/PluginNotFoundException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/PluginNotFoundException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/class-use/PluginNotFoundException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.plugin.PluginNotFoundException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/PluginProvider.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/PluginProvider.html
index 865acea..053bc47 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/PluginProvider.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/PluginProvider.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/class-use/PluginProvider.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.plugin.PluginProvider (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/PluginValidationException.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/PluginValidationException.html
index 5087318..aa6fd34 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/PluginValidationException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/class-use/PluginValidationException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/class-use/PluginValidationException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.plugin.PluginValidationException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/IgniteMessageFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/IgniteMessageFactory.html
index 412cd6b..84c5414 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/IgniteMessageFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/IgniteMessageFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/extensions/communication/IgniteMessageFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteMessageFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/IoPool.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/IoPool.html
index d00358a..f917b96 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/IoPool.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/IoPool.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/extensions/communication/IoPool.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IoPool (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/Message.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/Message.html
index 84d9710..2d6604a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/Message.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/Message.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/extensions/communication/Message.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Message (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/MessageCollectionItemType.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/MessageCollectionItemType.html
index 12242c9..b693aaf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/MessageCollectionItemType.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/MessageCollectionItemType.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/extensions/communication/MessageCollectionItemType.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MessageCollectionItemType (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/MessageFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/MessageFactory.html
index 65fad58..ec7e593 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/MessageFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/MessageFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/extensions/communication/MessageFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MessageFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/MessageFactoryProvider.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/MessageFactoryProvider.html
index 0a113b0..f75934b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/MessageFactoryProvider.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/MessageFactoryProvider.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/extensions/communication/MessageFactoryProvider.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MessageFactoryProvider (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/MessageFormatter.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/MessageFormatter.html
index b2a3a60..12a8ea3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/MessageFormatter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/MessageFormatter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/extensions/communication/MessageFormatter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MessageFormatter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/MessageReader.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/MessageReader.html
index 3308da7..a30b2a6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/MessageReader.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/MessageReader.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/extensions/communication/MessageReader.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MessageReader (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/MessageWriter.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/MessageWriter.html
index d6700b1..9d6035c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/MessageWriter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/MessageWriter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/extensions/communication/MessageWriter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MessageWriter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/IgniteMessageFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/IgniteMessageFactory.html
index 5c773c8..a561bd7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/IgniteMessageFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/IgniteMessageFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/IgniteMessageFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.plugin.extensions.communication.IgniteMessageFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/IoPool.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/IoPool.html
index 8093505..f3543f5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/IoPool.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/IoPool.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/IoPool.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.plugin.extensions.communication.IoPool (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/Message.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/Message.html
index bbb8b01..4bab083 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/Message.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/Message.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/Message.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.plugin.extensions.communication.Message (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/MessageCollectionItemType.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/MessageCollectionItemType.html
index 3e0b9cf..a295e5f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/MessageCollectionItemType.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/MessageCollectionItemType.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/MessageCollectionItemType.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.plugin.extensions.communication.MessageCollectionItemType (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/MessageFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/MessageFactory.html
index c25d813..5dc71fe 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/MessageFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/MessageFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/MessageFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.plugin.extensions.communication.MessageFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/MessageFactoryProvider.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/MessageFactoryProvider.html
index 8049d4d..9d86323 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/MessageFactoryProvider.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/MessageFactoryProvider.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/MessageFactoryProvider.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.plugin.extensions.communication.MessageFactoryProvider (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/MessageFormatter.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/MessageFormatter.html
index 99e7138..ed38866 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/MessageFormatter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/MessageFormatter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/MessageFormatter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.plugin.extensions.communication.MessageFormatter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/MessageReader.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/MessageReader.html
index 06e89e1..60dac67 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/MessageReader.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/MessageReader.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/MessageReader.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.plugin.extensions.communication.MessageReader (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/MessageWriter.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/MessageWriter.html
index bca1a56..21ca1c5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/MessageWriter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/MessageWriter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/extensions/communication/class-use/MessageWriter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.plugin.extensions.communication.MessageWriter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/package-frame.html
index fcb6f2e..cce1499 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/extensions/communication/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.plugin.extensions.communication (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/package-summary.html
index 3cc9a53..3c938bf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/extensions/communication/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.plugin.extensions.communication (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/package-tree.html
index f51db88..7c06e3c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/extensions/communication/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.plugin.extensions.communication Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/package-use.html
index 71140dd..6f7823f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/extensions/communication/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/extensions/communication/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.plugin.extensions.communication (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/package-frame.html
index 59596ed..ebb4acf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.plugin (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/package-summary.html
index 512e55f..6f109c5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.plugin (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/package-tree.html
index 9a76e15..0b5e25d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.plugin Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/package-use.html
index 1a6e804..bb253ff 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.plugin (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/PlatformCachePluginConfigurationClosure.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/PlatformCachePluginConfigurationClosure.html
index 9a72fc3..8e7f799 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/PlatformCachePluginConfigurationClosure.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/PlatformCachePluginConfigurationClosure.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/platform/PlatformCachePluginConfigurationClosure.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PlatformCachePluginConfigurationClosure (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/PlatformCachePluginConfigurationClosureFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/PlatformCachePluginConfigurationClosureFactory.html
index f0b0eea..5d7db2c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/PlatformCachePluginConfigurationClosureFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/PlatformCachePluginConfigurationClosureFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/platform/PlatformCachePluginConfigurationClosureFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PlatformCachePluginConfigurationClosureFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/PlatformPluginConfigurationClosure.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/PlatformPluginConfigurationClosure.html
index a86872d..1c2f2b5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/PlatformPluginConfigurationClosure.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/PlatformPluginConfigurationClosure.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/platform/PlatformPluginConfigurationClosure.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PlatformPluginConfigurationClosure (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/PlatformPluginConfigurationClosureFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/PlatformPluginConfigurationClosureFactory.html
index 4b05612..1cccca2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/PlatformPluginConfigurationClosureFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/PlatformPluginConfigurationClosureFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/platform/PlatformPluginConfigurationClosureFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PlatformPluginConfigurationClosureFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/class-use/PlatformCachePluginConfigurationClosure.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/class-use/PlatformCachePluginConfigurationClosure.html
index 99f8b1a..cdf452e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/class-use/PlatformCachePluginConfigurationClosure.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/class-use/PlatformCachePluginConfigurationClosure.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/platform/class-use/PlatformCachePluginConfigurationClosure.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.plugin.platform.PlatformCachePluginConfigurationClosure (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/class-use/PlatformCachePluginConfigurationClosureFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/class-use/PlatformCachePluginConfigurationClosureFactory.html
index 409f615..b02c388 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/class-use/PlatformCachePluginConfigurationClosureFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/class-use/PlatformCachePluginConfigurationClosureFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/platform/class-use/PlatformCachePluginConfigurationClosureFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.plugin.platform.PlatformCachePluginConfigurationClosureFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/class-use/PlatformPluginConfigurationClosure.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/class-use/PlatformPluginConfigurationClosure.html
index ff09d24..4735841 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/class-use/PlatformPluginConfigurationClosure.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/class-use/PlatformPluginConfigurationClosure.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/platform/class-use/PlatformPluginConfigurationClosure.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.plugin.platform.PlatformPluginConfigurationClosure (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/class-use/PlatformPluginConfigurationClosureFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/class-use/PlatformPluginConfigurationClosureFactory.html
index 7a30af7..2c07353 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/class-use/PlatformPluginConfigurationClosureFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/class-use/PlatformPluginConfigurationClosureFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/platform/class-use/PlatformPluginConfigurationClosureFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.plugin.platform.PlatformPluginConfigurationClosureFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/package-frame.html
index b90724b..9773d94 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/platform/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.plugin.platform (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/package-summary.html
index c2a9178..ee6c1f7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/platform/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.plugin.platform (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/package-tree.html
index 3bfae4f..6b54b37 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/platform/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.plugin.platform Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/package-use.html
index 4270a62..5eedc01 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/platform/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/platform/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.plugin.platform (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/AuthenticationContext.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/AuthenticationContext.html
index 07ede47..6860a0a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/AuthenticationContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/AuthenticationContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/security/AuthenticationContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>AuthenticationContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecurityBasicPermissionSet.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecurityBasicPermissionSet.html
index caf3ffd..6f62427 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecurityBasicPermissionSet.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecurityBasicPermissionSet.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/security/SecurityBasicPermissionSet.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SecurityBasicPermissionSet (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecurityCredentials.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecurityCredentials.html
index 335e102..1b7f57c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecurityCredentials.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecurityCredentials.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/security/SecurityCredentials.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SecurityCredentials (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecurityCredentialsBasicProvider.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecurityCredentialsBasicProvider.html
index 6fb5b1d..f474ad8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecurityCredentialsBasicProvider.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecurityCredentialsBasicProvider.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/security/SecurityCredentialsBasicProvider.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SecurityCredentialsBasicProvider (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecurityCredentialsProvider.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecurityCredentialsProvider.html
index a242254..1d5a73d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecurityCredentialsProvider.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecurityCredentialsProvider.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/security/SecurityCredentialsProvider.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SecurityCredentialsProvider (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecurityException.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecurityException.html
index 709d0e9..58a3e80 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecurityException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecurityException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/security/SecurityException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SecurityException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecurityPermission.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecurityPermission.html
index 4ba83bd..736587d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecurityPermission.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecurityPermission.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/security/SecurityPermission.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SecurityPermission (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecurityPermissionSet.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecurityPermissionSet.html
index 20d2507..2310463 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecurityPermissionSet.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecurityPermissionSet.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/security/SecurityPermissionSet.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SecurityPermissionSet (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecurityPermissionSetBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecurityPermissionSetBuilder.html
index b3e97a8..7ba146d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecurityPermissionSetBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecurityPermissionSetBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/security/SecurityPermissionSetBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SecurityPermissionSetBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecuritySubject.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecuritySubject.html
index f5ab2e0..950f46b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecuritySubject.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecuritySubject.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/security/SecuritySubject.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SecuritySubject (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecuritySubjectType.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecuritySubjectType.html
index 506c9a0..49e8aa6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecuritySubjectType.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/SecuritySubjectType.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/security/SecuritySubjectType.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SecuritySubjectType (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/AuthenticationContext.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/AuthenticationContext.html
index d6c9ba2..bf843b7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/AuthenticationContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/AuthenticationContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/security/class-use/AuthenticationContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.plugin.security.AuthenticationContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecurityBasicPermissionSet.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecurityBasicPermissionSet.html
index 8c90be1..58e6a7e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecurityBasicPermissionSet.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecurityBasicPermissionSet.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/security/class-use/SecurityBasicPermissionSet.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.plugin.security.SecurityBasicPermissionSet (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecurityCredentials.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecurityCredentials.html
index 8c8dbbb..5045fe3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecurityCredentials.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecurityCredentials.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/security/class-use/SecurityCredentials.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.plugin.security.SecurityCredentials (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecurityCredentialsBasicProvider.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecurityCredentialsBasicProvider.html
index b908281..0c62a5a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecurityCredentialsBasicProvider.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecurityCredentialsBasicProvider.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/security/class-use/SecurityCredentialsBasicProvider.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.plugin.security.SecurityCredentialsBasicProvider (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecurityCredentialsProvider.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecurityCredentialsProvider.html
index da07f42..bb2ab3b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecurityCredentialsProvider.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecurityCredentialsProvider.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/security/class-use/SecurityCredentialsProvider.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.plugin.security.SecurityCredentialsProvider (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecurityException.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecurityException.html
index 8fb8aa2..5625766 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecurityException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecurityException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/security/class-use/SecurityException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.plugin.security.SecurityException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecurityPermission.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecurityPermission.html
index c38b50b..f5ce297 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecurityPermission.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecurityPermission.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/security/class-use/SecurityPermission.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.plugin.security.SecurityPermission (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecurityPermissionSet.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecurityPermissionSet.html
index 676e67d..476dd8f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecurityPermissionSet.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecurityPermissionSet.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/security/class-use/SecurityPermissionSet.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.plugin.security.SecurityPermissionSet (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecurityPermissionSetBuilder.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecurityPermissionSetBuilder.html
index 75cecc0..6744bda 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecurityPermissionSetBuilder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecurityPermissionSetBuilder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/security/class-use/SecurityPermissionSetBuilder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.plugin.security.SecurityPermissionSetBuilder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecuritySubject.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecuritySubject.html
index 647a1b4..a3af535 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecuritySubject.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecuritySubject.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/security/class-use/SecuritySubject.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.plugin.security.SecuritySubject (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecuritySubjectType.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecuritySubjectType.html
index 2259750..29cc3b0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecuritySubjectType.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/class-use/SecuritySubjectType.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/security/class-use/SecuritySubjectType.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.plugin.security.SecuritySubjectType (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/package-frame.html
index eb9bd63..7068620 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/security/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.plugin.security (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/package-summary.html
index a285847..1feecf6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/security/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.plugin.security (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/package-tree.html
index 47fb32e..eb3a6de 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/security/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.plugin.security Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/package-use.html
index 3c7406f..19d26b0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/security/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/security/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.plugin.security (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/segmentation/SegmentationPolicy.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/segmentation/SegmentationPolicy.html
index 825455d..2f52a34 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/segmentation/SegmentationPolicy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/segmentation/SegmentationPolicy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/segmentation/SegmentationPolicy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SegmentationPolicy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/segmentation/SegmentationResolver.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/segmentation/SegmentationResolver.html
index 14309b8..7be5136 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/segmentation/SegmentationResolver.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/segmentation/SegmentationResolver.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/segmentation/SegmentationResolver.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SegmentationResolver (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/segmentation/class-use/SegmentationPolicy.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/segmentation/class-use/SegmentationPolicy.html
index 9c3ae7e..a210ec9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/segmentation/class-use/SegmentationPolicy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/segmentation/class-use/SegmentationPolicy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/segmentation/class-use/SegmentationPolicy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.plugin.segmentation.SegmentationPolicy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/segmentation/class-use/SegmentationResolver.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/segmentation/class-use/SegmentationResolver.html
index a60d4b2..618bfe7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/segmentation/class-use/SegmentationResolver.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/segmentation/class-use/SegmentationResolver.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/segmentation/class-use/SegmentationResolver.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.plugin.segmentation.SegmentationResolver (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/segmentation/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/segmentation/package-frame.html
index 6f354a7..f3b1c38 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/segmentation/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/segmentation/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/segmentation/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.plugin.segmentation (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/segmentation/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/segmentation/package-summary.html
index 720b4b9..b24bdc3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/segmentation/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/segmentation/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/segmentation/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.plugin.segmentation (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/segmentation/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/segmentation/package-tree.html
index 8356b26..6751cef 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/segmentation/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/segmentation/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/segmentation/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.plugin.segmentation Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/plugin/segmentation/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/plugin/segmentation/package-use.html
index 05d44d8..f31ac20 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/plugin/segmentation/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/plugin/segmentation/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/plugin/segmentation/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.plugin.segmentation (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/resources/CacheNameResource.html b/releases/2.9.1/javadoc/org/apache/ignite/resources/CacheNameResource.html
index 49873c8..f60a035 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/resources/CacheNameResource.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/resources/CacheNameResource.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/resources/CacheNameResource.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheNameResource (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/resources/CacheStoreSessionResource.html b/releases/2.9.1/javadoc/org/apache/ignite/resources/CacheStoreSessionResource.html
index 6fc4a89..331358b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/resources/CacheStoreSessionResource.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/resources/CacheStoreSessionResource.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/resources/CacheStoreSessionResource.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheStoreSessionResource (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/resources/IgniteInstanceResource.html b/releases/2.9.1/javadoc/org/apache/ignite/resources/IgniteInstanceResource.html
index 2f35098..d117390 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/resources/IgniteInstanceResource.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/resources/IgniteInstanceResource.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/resources/IgniteInstanceResource.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteInstanceResource (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/resources/JobContextResource.html b/releases/2.9.1/javadoc/org/apache/ignite/resources/JobContextResource.html
index 08e53dc..52d0cdb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/resources/JobContextResource.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/resources/JobContextResource.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/resources/JobContextResource.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>JobContextResource (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/resources/LoadBalancerResource.html b/releases/2.9.1/javadoc/org/apache/ignite/resources/LoadBalancerResource.html
index b132f47..5d2fb3d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/resources/LoadBalancerResource.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/resources/LoadBalancerResource.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/resources/LoadBalancerResource.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LoadBalancerResource (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/resources/LoggerResource.html b/releases/2.9.1/javadoc/org/apache/ignite/resources/LoggerResource.html
index e070132..3e684d3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/resources/LoggerResource.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/resources/LoggerResource.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/resources/LoggerResource.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LoggerResource (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/resources/ServiceResource.html b/releases/2.9.1/javadoc/org/apache/ignite/resources/ServiceResource.html
index c770f02..cef260c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/resources/ServiceResource.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/resources/ServiceResource.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/resources/ServiceResource.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ServiceResource (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/resources/SpringApplicationContextResource.html b/releases/2.9.1/javadoc/org/apache/ignite/resources/SpringApplicationContextResource.html
index 6d0b001..d30ab60 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/resources/SpringApplicationContextResource.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/resources/SpringApplicationContextResource.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/resources/SpringApplicationContextResource.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SpringApplicationContextResource (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/resources/SpringResource.DEFAULT.html b/releases/2.9.1/javadoc/org/apache/ignite/resources/SpringResource.DEFAULT.html
index 20cd7f5..8353753 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/resources/SpringResource.DEFAULT.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/resources/SpringResource.DEFAULT.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/resources/SpringResource.DEFAULT.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SpringResource.DEFAULT (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/resources/SpringResource.html b/releases/2.9.1/javadoc/org/apache/ignite/resources/SpringResource.html
index fe21542..02e1dd8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/resources/SpringResource.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/resources/SpringResource.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/resources/SpringResource.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SpringResource (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/resources/TaskContinuousMapperResource.html b/releases/2.9.1/javadoc/org/apache/ignite/resources/TaskContinuousMapperResource.html
index cc1308a..337abf2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/resources/TaskContinuousMapperResource.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/resources/TaskContinuousMapperResource.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/resources/TaskContinuousMapperResource.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TaskContinuousMapperResource (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/resources/TaskSessionResource.html b/releases/2.9.1/javadoc/org/apache/ignite/resources/TaskSessionResource.html
index e7c15ff..1c9bdbb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/resources/TaskSessionResource.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/resources/TaskSessionResource.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/resources/TaskSessionResource.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TaskSessionResource (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/CacheNameResource.html b/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/CacheNameResource.html
index 78eafdb..1e7e8f2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/CacheNameResource.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/CacheNameResource.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/resources/class-use/CacheNameResource.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.resources.CacheNameResource (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/CacheStoreSessionResource.html b/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/CacheStoreSessionResource.html
index 8e6705f..eec4343 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/CacheStoreSessionResource.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/CacheStoreSessionResource.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/resources/class-use/CacheStoreSessionResource.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.resources.CacheStoreSessionResource (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/IgniteInstanceResource.html b/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/IgniteInstanceResource.html
index 7665423..4ed5f46 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/IgniteInstanceResource.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/IgniteInstanceResource.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/resources/class-use/IgniteInstanceResource.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.resources.IgniteInstanceResource (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/JobContextResource.html b/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/JobContextResource.html
index 446a058..ed75dcf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/JobContextResource.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/JobContextResource.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/resources/class-use/JobContextResource.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.resources.JobContextResource (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/LoadBalancerResource.html b/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/LoadBalancerResource.html
index 88d9ef2..916016b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/LoadBalancerResource.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/LoadBalancerResource.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/resources/class-use/LoadBalancerResource.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.resources.LoadBalancerResource (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/LoggerResource.html b/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/LoggerResource.html
index 0a06ebd..88aa1c2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/LoggerResource.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/LoggerResource.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/resources/class-use/LoggerResource.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.resources.LoggerResource (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/ServiceResource.html b/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/ServiceResource.html
index 306815e..9fbcc36 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/ServiceResource.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/ServiceResource.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/resources/class-use/ServiceResource.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.resources.ServiceResource (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/SpringApplicationContextResource.html b/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/SpringApplicationContextResource.html
index d114d2c..5f44f04 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/SpringApplicationContextResource.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/SpringApplicationContextResource.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/resources/class-use/SpringApplicationContextResource.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.resources.SpringApplicationContextResource (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/SpringResource.DEFAULT.html b/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/SpringResource.DEFAULT.html
index bb55411..88cac0d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/SpringResource.DEFAULT.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/SpringResource.DEFAULT.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/resources/class-use/SpringResource.DEFAULT.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.resources.SpringResource.DEFAULT (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/SpringResource.html b/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/SpringResource.html
index eec1653..9ac075f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/SpringResource.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/SpringResource.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/resources/class-use/SpringResource.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.resources.SpringResource (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/TaskContinuousMapperResource.html b/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/TaskContinuousMapperResource.html
index 83d5406..c3f6054 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/TaskContinuousMapperResource.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/TaskContinuousMapperResource.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/resources/class-use/TaskContinuousMapperResource.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.resources.TaskContinuousMapperResource (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/TaskSessionResource.html b/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/TaskSessionResource.html
index eda8628..638c548 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/TaskSessionResource.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/resources/class-use/TaskSessionResource.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/resources/class-use/TaskSessionResource.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.resources.TaskSessionResource (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/resources/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/resources/package-frame.html
index 913029c..03cf23b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/resources/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/resources/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/resources/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.resources (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/resources/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/resources/package-summary.html
index b1ee13d..74e862d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/resources/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/resources/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/resources/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.resources (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/resources/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/resources/package-tree.html
index 075080c..f6247ef 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/resources/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/resources/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/resources/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.resources Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/resources/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/resources/package-use.html
index 69054cd..9326b06 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/resources/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/resources/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/resources/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.resources (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/scheduler/SchedulerFuture.html b/releases/2.9.1/javadoc/org/apache/ignite/scheduler/SchedulerFuture.html
index 57132a0..e6d539e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/scheduler/SchedulerFuture.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/scheduler/SchedulerFuture.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/scheduler/SchedulerFuture.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SchedulerFuture (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/scheduler/class-use/SchedulerFuture.html b/releases/2.9.1/javadoc/org/apache/ignite/scheduler/class-use/SchedulerFuture.html
index 5234173..306624a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/scheduler/class-use/SchedulerFuture.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/scheduler/class-use/SchedulerFuture.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/scheduler/class-use/SchedulerFuture.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.scheduler.SchedulerFuture (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/scheduler/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/scheduler/package-frame.html
index 580e483..511d556 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/scheduler/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/scheduler/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/scheduler/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.scheduler (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/scheduler/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/scheduler/package-summary.html
index c9ee7fe..c3d6e62 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/scheduler/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/scheduler/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/scheduler/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.scheduler (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/scheduler/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/scheduler/package-tree.html
index 1a9a9de..3d0c1bb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/scheduler/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/scheduler/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/scheduler/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.scheduler Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/scheduler/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/scheduler/package-use.html
index a023f6b..f85e934 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/scheduler/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/scheduler/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/scheduler/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.scheduler (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/services/Service.html b/releases/2.9.1/javadoc/org/apache/ignite/services/Service.html
index a89998e..baee221 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/services/Service.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/services/Service.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/services/Service.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Service (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/services/ServiceConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/services/ServiceConfiguration.html
index 3e2a238..c707601 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/services/ServiceConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/services/ServiceConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/services/ServiceConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ServiceConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/services/ServiceContext.html b/releases/2.9.1/javadoc/org/apache/ignite/services/ServiceContext.html
index add0158..f990f9d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/services/ServiceContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/services/ServiceContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/services/ServiceContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ServiceContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/services/ServiceDeploymentException.html b/releases/2.9.1/javadoc/org/apache/ignite/services/ServiceDeploymentException.html
index d77932b..d812f2d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/services/ServiceDeploymentException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/services/ServiceDeploymentException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/services/ServiceDeploymentException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ServiceDeploymentException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/services/ServiceDescriptor.html b/releases/2.9.1/javadoc/org/apache/ignite/services/ServiceDescriptor.html
index 124d6bc..b3ce55f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/services/ServiceDescriptor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/services/ServiceDescriptor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/services/ServiceDescriptor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ServiceDescriptor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/services/class-use/Service.html b/releases/2.9.1/javadoc/org/apache/ignite/services/class-use/Service.html
index 39c001e..86cacaa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/services/class-use/Service.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/services/class-use/Service.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/services/class-use/Service.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.services.Service (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/services/class-use/ServiceConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/services/class-use/ServiceConfiguration.html
index 78fe1d4..4a2052f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/services/class-use/ServiceConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/services/class-use/ServiceConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/services/class-use/ServiceConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.services.ServiceConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/services/class-use/ServiceContext.html b/releases/2.9.1/javadoc/org/apache/ignite/services/class-use/ServiceContext.html
index 65f1e1a..a759799 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/services/class-use/ServiceContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/services/class-use/ServiceContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/services/class-use/ServiceContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.services.ServiceContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/services/class-use/ServiceDeploymentException.html b/releases/2.9.1/javadoc/org/apache/ignite/services/class-use/ServiceDeploymentException.html
index 077a1c4..35f66f6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/services/class-use/ServiceDeploymentException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/services/class-use/ServiceDeploymentException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/services/class-use/ServiceDeploymentException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.services.ServiceDeploymentException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/services/class-use/ServiceDescriptor.html b/releases/2.9.1/javadoc/org/apache/ignite/services/class-use/ServiceDescriptor.html
index 19652b9..e2548f7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/services/class-use/ServiceDescriptor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/services/class-use/ServiceDescriptor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/services/class-use/ServiceDescriptor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.services.ServiceDescriptor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/services/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/services/package-frame.html
index 41f44e9..2bdc15e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/services/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/services/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/services/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.services (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/services/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/services/package-summary.html
index 414a8da..97c31c2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/services/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/services/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/services/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.services (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/services/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/services/package-tree.html
index 53af845..641b03f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/services/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/services/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/services/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.services Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/services/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/services/package-use.html
index dd8e8ef..2cb8f7e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/services/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/services/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/services/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.services (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/ExponentialBackoffTimeoutStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/ExponentialBackoffTimeoutStrategy.html
index 4ba01cb..3d41fbf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/ExponentialBackoffTimeoutStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/ExponentialBackoffTimeoutStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/ExponentialBackoffTimeoutStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ExponentialBackoffTimeoutStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteNodeValidationResult.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteNodeValidationResult.html
index 3801889..41f9686 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteNodeValidationResult.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteNodeValidationResult.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/IgniteNodeValidationResult.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteNodeValidationResult (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgnitePortProtocol.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgnitePortProtocol.html
index ab67a93..3bf7dfa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgnitePortProtocol.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgnitePortProtocol.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/IgnitePortProtocol.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgnitePortProtocol (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpi.html
index 28554e7..d55540c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/IgniteSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiAdapter.html
index 02e7ed2..147067a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/IgniteSpiAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteSpiAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiCloseableIterator.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiCloseableIterator.html
index a07205b..1e67d00 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiCloseableIterator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiCloseableIterator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/IgniteSpiCloseableIterator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteSpiCloseableIterator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiConfiguration.html
index f94bb32..cc0d201 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/IgniteSpiConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteSpiConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiConsistencyChecked.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiConsistencyChecked.html
index b0d9d87..16fdf15 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiConsistencyChecked.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiConsistencyChecked.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/IgniteSpiConsistencyChecked.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteSpiConsistencyChecked (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiContext.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiContext.html
index 96d8b51..6c0b04f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/IgniteSpiContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteSpiContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiException.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiException.html
index 8fbe5d3..758c71d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/IgniteSpiException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteSpiException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiMBeanAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiMBeanAdapter.html
index 230ecdc..c18ac20 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiMBeanAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiMBeanAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/IgniteSpiMBeanAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteSpiMBeanAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiManagementMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiManagementMBean.html
index f7a66f5..1d8e1b5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiManagementMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiManagementMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/IgniteSpiManagementMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteSpiManagementMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiMultiException.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiMultiException.html
index 1281fa8..8a3ba48 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiMultiException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiMultiException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/IgniteSpiMultiException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteSpiMultiException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiMultipleInstancesSupport.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiMultipleInstancesSupport.html
index 659b0ba..b204d97 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiMultipleInstancesSupport.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiMultipleInstancesSupport.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/IgniteSpiMultipleInstancesSupport.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteSpiMultipleInstancesSupport (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiNoop.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiNoop.html
index 5df6063..a82df3a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiNoop.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiNoop.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/IgniteSpiNoop.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteSpiNoop (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiOperationTimeoutException.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiOperationTimeoutException.html
index 58fb473..d4d9f1c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiOperationTimeoutException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiOperationTimeoutException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/IgniteSpiOperationTimeoutException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteSpiOperationTimeoutException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiOperationTimeoutHelper.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiOperationTimeoutHelper.html
index b64adbd..eae5787 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiOperationTimeoutHelper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiOperationTimeoutHelper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/IgniteSpiOperationTimeoutHelper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteSpiOperationTimeoutHelper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiThread.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiThread.html
index 6fe08db..40d7d87 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiThread.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiThread.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/IgniteSpiThread.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteSpiThread (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiThreadFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiThreadFactory.html
index d4550d7..de1874d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiThreadFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiThreadFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/IgniteSpiThreadFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteSpiThreadFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiTimeoutObject.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiTimeoutObject.html
index 0955fc7..32f90a8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiTimeoutObject.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiTimeoutObject.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/IgniteSpiTimeoutObject.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteSpiTimeoutObject (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiVersionCheckException.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiVersionCheckException.html
index c52e2f3..3dfa5fb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiVersionCheckException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/IgniteSpiVersionCheckException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/IgniteSpiVersionCheckException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteSpiVersionCheckException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/TimeoutStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/TimeoutStrategy.html
index 8d50cbc..ae78fb5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/TimeoutStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/TimeoutStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/TimeoutStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TimeoutStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/CheckpointListener.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/CheckpointListener.html
index eaf54ac..ab1c15e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/CheckpointListener.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/CheckpointListener.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/CheckpointListener.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CheckpointListener (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/CheckpointSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/CheckpointSpi.html
index 348d171..b659e3f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/CheckpointSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/CheckpointSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/CheckpointSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CheckpointSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/cache/CacheCheckpointSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/cache/CacheCheckpointSpi.html
index b60f48f..19cc2fe 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/cache/CacheCheckpointSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/cache/CacheCheckpointSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/cache/CacheCheckpointSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheCheckpointSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/cache/CacheCheckpointSpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/cache/CacheCheckpointSpiMBean.html
index 1685690..2116aeb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/cache/CacheCheckpointSpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/cache/CacheCheckpointSpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/cache/CacheCheckpointSpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheCheckpointSpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/cache/class-use/CacheCheckpointSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/cache/class-use/CacheCheckpointSpi.html
index 51ef4b9..e98df5e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/cache/class-use/CacheCheckpointSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/cache/class-use/CacheCheckpointSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/cache/class-use/CacheCheckpointSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.checkpoint.cache.CacheCheckpointSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/cache/class-use/CacheCheckpointSpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/cache/class-use/CacheCheckpointSpiMBean.html
index a9cdfdb..977d224 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/cache/class-use/CacheCheckpointSpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/cache/class-use/CacheCheckpointSpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/cache/class-use/CacheCheckpointSpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.checkpoint.cache.CacheCheckpointSpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/cache/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/cache/package-frame.html
index d92db19..89a70de 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/cache/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/cache/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/cache/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.checkpoint.cache (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/cache/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/cache/package-summary.html
index 251fdc0..3f17b23 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/cache/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/cache/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/cache/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.checkpoint.cache (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/cache/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/cache/package-tree.html
index be50708..11141cf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/cache/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/cache/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/cache/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.checkpoint.cache Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/cache/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/cache/package-use.html
index e6a74a3..3469ae2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/cache/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/cache/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/cache/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.checkpoint.cache (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/class-use/CheckpointListener.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/class-use/CheckpointListener.html
index 1ee2029..ecc13ce 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/class-use/CheckpointListener.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/class-use/CheckpointListener.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/class-use/CheckpointListener.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.checkpoint.CheckpointListener (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/class-use/CheckpointSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/class-use/CheckpointSpi.html
index 4d5aad8..6698130 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/class-use/CheckpointSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/class-use/CheckpointSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/class-use/CheckpointSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.checkpoint.CheckpointSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/jdbc/JdbcCheckpointSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/jdbc/JdbcCheckpointSpi.html
index 0e3a231..842c984 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/jdbc/JdbcCheckpointSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/jdbc/JdbcCheckpointSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/jdbc/JdbcCheckpointSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>JdbcCheckpointSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/jdbc/JdbcCheckpointSpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/jdbc/JdbcCheckpointSpiMBean.html
index 30d97f7..ab8c664 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/jdbc/JdbcCheckpointSpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/jdbc/JdbcCheckpointSpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/jdbc/JdbcCheckpointSpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>JdbcCheckpointSpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/jdbc/class-use/JdbcCheckpointSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/jdbc/class-use/JdbcCheckpointSpi.html
index 82718fe..3ae2c73 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/jdbc/class-use/JdbcCheckpointSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/jdbc/class-use/JdbcCheckpointSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/jdbc/class-use/JdbcCheckpointSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.checkpoint.jdbc.JdbcCheckpointSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/jdbc/class-use/JdbcCheckpointSpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/jdbc/class-use/JdbcCheckpointSpiMBean.html
index 846122e..54b3f77 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/jdbc/class-use/JdbcCheckpointSpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/jdbc/class-use/JdbcCheckpointSpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/jdbc/class-use/JdbcCheckpointSpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.checkpoint.jdbc.JdbcCheckpointSpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/jdbc/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/jdbc/package-frame.html
index 5e4540e..d695b90 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/jdbc/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/jdbc/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/jdbc/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.checkpoint.jdbc (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/jdbc/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/jdbc/package-summary.html
index bf5e7db..67228ac3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/jdbc/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/jdbc/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/jdbc/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.checkpoint.jdbc (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/jdbc/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/jdbc/package-tree.html
index 4d2ccd2..8a9817f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/jdbc/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/jdbc/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/jdbc/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.checkpoint.jdbc Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/jdbc/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/jdbc/package-use.html
index 0dc78b2..6c97168 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/jdbc/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/jdbc/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/jdbc/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.checkpoint.jdbc (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/noop/NoopCheckpointSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/noop/NoopCheckpointSpi.html
index 3b2b560..d31f491 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/noop/NoopCheckpointSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/noop/NoopCheckpointSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/noop/NoopCheckpointSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NoopCheckpointSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/noop/class-use/NoopCheckpointSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/noop/class-use/NoopCheckpointSpi.html
index 1271a4d..6feabf7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/noop/class-use/NoopCheckpointSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/noop/class-use/NoopCheckpointSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/noop/class-use/NoopCheckpointSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.checkpoint.noop.NoopCheckpointSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/noop/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/noop/package-frame.html
index cfcad20..079279e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/noop/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/noop/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/noop/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.checkpoint.noop (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/noop/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/noop/package-summary.html
index 6795e47..27e3703 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/noop/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/noop/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/noop/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.checkpoint.noop (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/noop/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/noop/package-tree.html
index 7b9f3be..f642ee0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/noop/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/noop/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/noop/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.checkpoint.noop Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/noop/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/noop/package-use.html
index 712fc11..797c0d9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/noop/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/noop/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/noop/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.checkpoint.noop (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/package-frame.html
index 3976431..e012395 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.checkpoint (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/package-summary.html
index 8fc9bcd..117a89c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.checkpoint (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/package-tree.html
index 0685c97..f8bb112 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.checkpoint Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/package-use.html
index 85d599d..22761ba 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.checkpoint (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/s3/S3CheckpointSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/s3/S3CheckpointSpi.html
index e9519fd..2f82de7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/s3/S3CheckpointSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/s3/S3CheckpointSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/s3/S3CheckpointSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>S3CheckpointSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/s3/S3CheckpointSpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/s3/S3CheckpointSpiMBean.html
index 0c0009c..b9b6dea 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/s3/S3CheckpointSpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/s3/S3CheckpointSpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/s3/S3CheckpointSpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>S3CheckpointSpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/s3/class-use/S3CheckpointSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/s3/class-use/S3CheckpointSpi.html
index a657731..9d2d03c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/s3/class-use/S3CheckpointSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/s3/class-use/S3CheckpointSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/s3/class-use/S3CheckpointSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.checkpoint.s3.S3CheckpointSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/s3/class-use/S3CheckpointSpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/s3/class-use/S3CheckpointSpiMBean.html
index b797606..218341f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/s3/class-use/S3CheckpointSpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/s3/class-use/S3CheckpointSpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/s3/class-use/S3CheckpointSpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.checkpoint.s3.S3CheckpointSpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/s3/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/s3/package-frame.html
index 3bb4799..ce9c2f3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/s3/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/s3/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/s3/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.checkpoint.s3 (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/s3/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/s3/package-summary.html
index 9cab47d..122c9b6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/s3/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/s3/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/s3/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.checkpoint.s3 (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/s3/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/s3/package-tree.html
index c277687..f73bde7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/s3/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/s3/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/s3/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.checkpoint.s3 Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/s3/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/s3/package-use.html
index 6c4a403..0cf0467 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/s3/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/s3/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/s3/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.checkpoint.s3 (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/SharedFsCheckpointSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/SharedFsCheckpointSpi.html
index 00813a3..63ea238 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/SharedFsCheckpointSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/SharedFsCheckpointSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/SharedFsCheckpointSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SharedFsCheckpointSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/SharedFsCheckpointSpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/SharedFsCheckpointSpiMBean.html
index cd42d28..4405063 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/SharedFsCheckpointSpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/SharedFsCheckpointSpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/SharedFsCheckpointSpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SharedFsCheckpointSpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/class-use/SharedFsCheckpointSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/class-use/SharedFsCheckpointSpi.html
index 04bc74b..676509d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/class-use/SharedFsCheckpointSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/class-use/SharedFsCheckpointSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/class-use/SharedFsCheckpointSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.checkpoint.sharedfs.SharedFsCheckpointSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/class-use/SharedFsCheckpointSpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/class-use/SharedFsCheckpointSpiMBean.html
index 153da07..e54c0e3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/class-use/SharedFsCheckpointSpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/class-use/SharedFsCheckpointSpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/class-use/SharedFsCheckpointSpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.checkpoint.sharedfs.SharedFsCheckpointSpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/package-frame.html
index aee7285..73e5ced 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.checkpoint.sharedfs (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/package-summary.html
index 0c9627d..26f4a3d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.checkpoint.sharedfs (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/package-tree.html
index 6b26282..56a87c4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.checkpoint.sharedfs Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/package-use.html
index 3cd2de9..041c253 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/checkpoint/sharedfs/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.checkpoint.sharedfs (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/ExponentialBackoffTimeoutStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/ExponentialBackoffTimeoutStrategy.html
index 193b305..cf0f756 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/ExponentialBackoffTimeoutStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/ExponentialBackoffTimeoutStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/class-use/ExponentialBackoffTimeoutStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.ExponentialBackoffTimeoutStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteNodeValidationResult.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteNodeValidationResult.html
index 901c3a4..2553eca 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteNodeValidationResult.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteNodeValidationResult.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/class-use/IgniteNodeValidationResult.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.IgniteNodeValidationResult (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgnitePortProtocol.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgnitePortProtocol.html
index 2276435..6f9ca0f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgnitePortProtocol.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgnitePortProtocol.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/class-use/IgnitePortProtocol.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.IgnitePortProtocol (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpi.html
index 27f86fc..8a29baf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/class-use/IgniteSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.IgniteSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiAdapter.html
index 5bcd94f..01e1271 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/class-use/IgniteSpiAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.IgniteSpiAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiCloseableIterator.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiCloseableIterator.html
index 6cbc9af..02e52f9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiCloseableIterator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiCloseableIterator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/class-use/IgniteSpiCloseableIterator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.IgniteSpiCloseableIterator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiConfiguration.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiConfiguration.html
index 7255b6e..34b9006 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiConfiguration.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiConfiguration.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/class-use/IgniteSpiConfiguration.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.IgniteSpiConfiguration (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiConsistencyChecked.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiConsistencyChecked.html
index 649b02f..703c30f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiConsistencyChecked.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiConsistencyChecked.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/class-use/IgniteSpiConsistencyChecked.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.IgniteSpiConsistencyChecked (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiContext.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiContext.html
index 6431c70..88966ee 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/class-use/IgniteSpiContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.IgniteSpiContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiException.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiException.html
index 9a769b7..6c5a780 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/class-use/IgniteSpiException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.IgniteSpiException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiMBeanAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiMBeanAdapter.html
index 10932c8..f86bfc1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiMBeanAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiMBeanAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/class-use/IgniteSpiMBeanAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.IgniteSpiMBeanAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiManagementMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiManagementMBean.html
index b63821d..fed6f85 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiManagementMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiManagementMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/class-use/IgniteSpiManagementMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.IgniteSpiManagementMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiMultiException.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiMultiException.html
index c7a2033..44329a1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiMultiException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiMultiException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/class-use/IgniteSpiMultiException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.IgniteSpiMultiException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiMultipleInstancesSupport.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiMultipleInstancesSupport.html
index b36e594..3cebec4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiMultipleInstancesSupport.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiMultipleInstancesSupport.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/class-use/IgniteSpiMultipleInstancesSupport.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.IgniteSpiMultipleInstancesSupport (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiNoop.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiNoop.html
index a313bbe..9b3bc53 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiNoop.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiNoop.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/class-use/IgniteSpiNoop.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.IgniteSpiNoop (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiOperationTimeoutException.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiOperationTimeoutException.html
index b3ed048..5d44fa1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiOperationTimeoutException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiOperationTimeoutException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/class-use/IgniteSpiOperationTimeoutException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.IgniteSpiOperationTimeoutException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiOperationTimeoutHelper.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiOperationTimeoutHelper.html
index f64a59e..98eb8fa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiOperationTimeoutHelper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiOperationTimeoutHelper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/class-use/IgniteSpiOperationTimeoutHelper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.IgniteSpiOperationTimeoutHelper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiThread.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiThread.html
index 95ad3a6..ff5173a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiThread.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiThread.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/class-use/IgniteSpiThread.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.IgniteSpiThread (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiThreadFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiThreadFactory.html
index 5c1c6d1..be507b0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiThreadFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiThreadFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/class-use/IgniteSpiThreadFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.IgniteSpiThreadFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiTimeoutObject.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiTimeoutObject.html
index 985a152..eecf057 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiTimeoutObject.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiTimeoutObject.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/class-use/IgniteSpiTimeoutObject.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.IgniteSpiTimeoutObject (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiVersionCheckException.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiVersionCheckException.html
index 6fcfa8e..77ce435 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiVersionCheckException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/IgniteSpiVersionCheckException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/class-use/IgniteSpiVersionCheckException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.IgniteSpiVersionCheckException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/TimeoutStrategy.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/TimeoutStrategy.html
index 21121eb..52ad3ba 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/TimeoutStrategy.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/class-use/TimeoutStrategy.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/class-use/TimeoutStrategy.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.TimeoutStrategy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/CollisionContext.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/CollisionContext.html
index 3e102cc..7993f13 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/CollisionContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/CollisionContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/CollisionContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CollisionContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/CollisionExternalListener.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/CollisionExternalListener.html
index 7cacabe..9b77238 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/CollisionExternalListener.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/CollisionExternalListener.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/CollisionExternalListener.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CollisionExternalListener (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/CollisionJobContext.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/CollisionJobContext.html
index d1d7ac6..ced4a8f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/CollisionJobContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/CollisionJobContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/CollisionJobContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CollisionJobContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/CollisionSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/CollisionSpi.html
index cab69b2..2f681de 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/CollisionSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/CollisionSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/CollisionSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CollisionSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/class-use/CollisionContext.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/class-use/CollisionContext.html
index 875b83e..150ee07 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/class-use/CollisionContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/class-use/CollisionContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/class-use/CollisionContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.collision.CollisionContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/class-use/CollisionExternalListener.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/class-use/CollisionExternalListener.html
index cd032a8..69e8e66 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/class-use/CollisionExternalListener.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/class-use/CollisionExternalListener.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/class-use/CollisionExternalListener.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.collision.CollisionExternalListener (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/class-use/CollisionJobContext.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/class-use/CollisionJobContext.html
index 4ac480e..e553dde 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/class-use/CollisionJobContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/class-use/CollisionJobContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/class-use/CollisionJobContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.collision.CollisionJobContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/class-use/CollisionSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/class-use/CollisionSpi.html
index 48bedde..8f749c4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/class-use/CollisionSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/class-use/CollisionSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/class-use/CollisionSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.collision.CollisionSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/fifoqueue/FifoQueueCollisionSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/fifoqueue/FifoQueueCollisionSpi.html
index cdf41a2..8c2cf7d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/fifoqueue/FifoQueueCollisionSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/fifoqueue/FifoQueueCollisionSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/fifoqueue/FifoQueueCollisionSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>FifoQueueCollisionSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/fifoqueue/FifoQueueCollisionSpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/fifoqueue/FifoQueueCollisionSpiMBean.html
index 37ca0d0..dbe0a0a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/fifoqueue/FifoQueueCollisionSpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/fifoqueue/FifoQueueCollisionSpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/fifoqueue/FifoQueueCollisionSpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>FifoQueueCollisionSpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/fifoqueue/class-use/FifoQueueCollisionSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/fifoqueue/class-use/FifoQueueCollisionSpi.html
index 5bc0697..dc12f4d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/fifoqueue/class-use/FifoQueueCollisionSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/fifoqueue/class-use/FifoQueueCollisionSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/fifoqueue/class-use/FifoQueueCollisionSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.collision.fifoqueue.FifoQueueCollisionSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/fifoqueue/class-use/FifoQueueCollisionSpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/fifoqueue/class-use/FifoQueueCollisionSpiMBean.html
index 65774dd..7251d4d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/fifoqueue/class-use/FifoQueueCollisionSpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/fifoqueue/class-use/FifoQueueCollisionSpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/fifoqueue/class-use/FifoQueueCollisionSpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.collision.fifoqueue.FifoQueueCollisionSpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/fifoqueue/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/fifoqueue/package-frame.html
index 9815159..f544f1e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/fifoqueue/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/fifoqueue/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/fifoqueue/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.collision.fifoqueue (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/fifoqueue/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/fifoqueue/package-summary.html
index 5784f0b..2e6d064 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/fifoqueue/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/fifoqueue/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/fifoqueue/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.collision.fifoqueue (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/fifoqueue/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/fifoqueue/package-tree.html
index b402ab3..1ec35b10 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/fifoqueue/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/fifoqueue/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/fifoqueue/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.collision.fifoqueue Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/fifoqueue/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/fifoqueue/package-use.html
index b2de7ce..9bec8b7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/fifoqueue/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/fifoqueue/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/fifoqueue/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.collision.fifoqueue (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/JobStealingCollisionSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/JobStealingCollisionSpi.html
index 3df425d..c1e1d91 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/JobStealingCollisionSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/JobStealingCollisionSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/jobstealing/JobStealingCollisionSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>JobStealingCollisionSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/JobStealingCollisionSpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/JobStealingCollisionSpiMBean.html
index 286646e..c49f10c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/JobStealingCollisionSpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/JobStealingCollisionSpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/jobstealing/JobStealingCollisionSpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>JobStealingCollisionSpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/JobStealingDisabled.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/JobStealingDisabled.html
index 414e29c..9be6bd4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/JobStealingDisabled.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/JobStealingDisabled.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/jobstealing/JobStealingDisabled.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>JobStealingDisabled (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/JobStealingRequest.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/JobStealingRequest.html
index 6bc0362..685779c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/JobStealingRequest.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/JobStealingRequest.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/jobstealing/JobStealingRequest.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>JobStealingRequest (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/class-use/JobStealingCollisionSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/class-use/JobStealingCollisionSpi.html
index 4e158b4..e950185 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/class-use/JobStealingCollisionSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/class-use/JobStealingCollisionSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/jobstealing/class-use/JobStealingCollisionSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.collision.jobstealing.JobStealingCollisionSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/class-use/JobStealingCollisionSpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/class-use/JobStealingCollisionSpiMBean.html
index 2558029..00aad81 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/class-use/JobStealingCollisionSpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/class-use/JobStealingCollisionSpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/jobstealing/class-use/JobStealingCollisionSpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.collision.jobstealing.JobStealingCollisionSpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/class-use/JobStealingDisabled.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/class-use/JobStealingDisabled.html
index 4424e00..b964cbb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/class-use/JobStealingDisabled.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/class-use/JobStealingDisabled.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/jobstealing/class-use/JobStealingDisabled.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.collision.jobstealing.JobStealingDisabled (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/class-use/JobStealingRequest.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/class-use/JobStealingRequest.html
index 93bf05d..30bf986 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/class-use/JobStealingRequest.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/class-use/JobStealingRequest.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/jobstealing/class-use/JobStealingRequest.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.collision.jobstealing.JobStealingRequest (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/package-frame.html
index 0ce811e..40fbf88 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/jobstealing/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.collision.jobstealing (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/package-summary.html
index c6fb17d..d752a7c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/jobstealing/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.collision.jobstealing (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/package-tree.html
index 36fa06b..11b62c2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/jobstealing/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.collision.jobstealing Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/package-use.html
index 729dbb1..0a65b84 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/jobstealing/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/jobstealing/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.collision.jobstealing (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/noop/NoopCollisionSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/noop/NoopCollisionSpi.html
index 2f61bfe..6fd9ee3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/noop/NoopCollisionSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/noop/NoopCollisionSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/noop/NoopCollisionSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NoopCollisionSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/noop/class-use/NoopCollisionSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/noop/class-use/NoopCollisionSpi.html
index f8fc0b0..0711a98 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/noop/class-use/NoopCollisionSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/noop/class-use/NoopCollisionSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/noop/class-use/NoopCollisionSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.collision.noop.NoopCollisionSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/noop/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/noop/package-frame.html
index d568861..7ee201b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/noop/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/noop/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/noop/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.collision.noop (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/noop/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/noop/package-summary.html
index 24bf261..0472e6d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/noop/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/noop/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/noop/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.collision.noop (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/noop/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/noop/package-tree.html
index 0b3b6ee..4836726 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/noop/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/noop/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/noop/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.collision.noop Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/noop/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/noop/package-use.html
index 782ed2d..e1a0ff3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/noop/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/noop/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/noop/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.collision.noop (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/package-frame.html
index 8410287..bb1e314 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.collision (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/package-summary.html
index 550c873..44975c0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.collision (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/package-tree.html
index e99f5f5..891f9d8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.collision Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/package-use.html
index ea8f6c0..8ca40bb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.collision (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/priorityqueue/PriorityQueueCollisionSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/priorityqueue/PriorityQueueCollisionSpi.html
index 9d91c2f..3a2fe28 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/priorityqueue/PriorityQueueCollisionSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/priorityqueue/PriorityQueueCollisionSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/priorityqueue/PriorityQueueCollisionSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PriorityQueueCollisionSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/priorityqueue/PriorityQueueCollisionSpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/priorityqueue/PriorityQueueCollisionSpiMBean.html
index 905229f..582319a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/priorityqueue/PriorityQueueCollisionSpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/priorityqueue/PriorityQueueCollisionSpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/priorityqueue/PriorityQueueCollisionSpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PriorityQueueCollisionSpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/priorityqueue/class-use/PriorityQueueCollisionSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/priorityqueue/class-use/PriorityQueueCollisionSpi.html
index 2a9f03d..794e853 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/priorityqueue/class-use/PriorityQueueCollisionSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/priorityqueue/class-use/PriorityQueueCollisionSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/priorityqueue/class-use/PriorityQueueCollisionSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.collision.priorityqueue.PriorityQueueCollisionSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/priorityqueue/class-use/PriorityQueueCollisionSpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/priorityqueue/class-use/PriorityQueueCollisionSpiMBean.html
index 6310e4f..499c303 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/priorityqueue/class-use/PriorityQueueCollisionSpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/priorityqueue/class-use/PriorityQueueCollisionSpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/priorityqueue/class-use/PriorityQueueCollisionSpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.collision.priorityqueue.PriorityQueueCollisionSpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/priorityqueue/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/priorityqueue/package-frame.html
index a873272..8b329f4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/priorityqueue/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/priorityqueue/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/priorityqueue/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.collision.priorityqueue (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/priorityqueue/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/priorityqueue/package-summary.html
index ea9faa2..362f2d3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/priorityqueue/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/priorityqueue/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/priorityqueue/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.collision.priorityqueue (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/priorityqueue/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/priorityqueue/package-tree.html
index c378199..35c505b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/priorityqueue/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/priorityqueue/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/priorityqueue/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.collision.priorityqueue Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/priorityqueue/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/priorityqueue/package-use.html
index 5d359ce..7153791 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/priorityqueue/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/collision/priorityqueue/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/priorityqueue/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.collision.priorityqueue (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/CommunicationListener.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/CommunicationListener.html
index 17d488e..44cf34b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/CommunicationListener.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/CommunicationListener.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/communication/CommunicationListener.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CommunicationListener (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/CommunicationSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/CommunicationSpi.html
index 9f40651..e62b705 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/CommunicationSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/CommunicationSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/communication/CommunicationSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CommunicationSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/class-use/CommunicationListener.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/class-use/CommunicationListener.html
index f96bf59..e59d1d5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/class-use/CommunicationListener.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/class-use/CommunicationListener.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/communication/class-use/CommunicationListener.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.communication.CommunicationListener (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/class-use/CommunicationSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/class-use/CommunicationSpi.html
index 2fd6457..7492ff7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/class-use/CommunicationSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/class-use/CommunicationSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/communication/class-use/CommunicationSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.communication.CommunicationSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/package-frame.html
index 8166ff0..53037eb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/communication/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.communication (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/package-summary.html
index d0cedb9..6c5b411 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/communication/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.communication (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/package-tree.html
index d251162..d1f36f6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/communication/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.communication Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/package-use.html
index 498996a..ba662ef 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/communication/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.communication (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.html
index a8d24e2..591101f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TcpCommunicationSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpiMBean.html
index 182f976..aecdc0f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TcpCommunicationSpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/class-use/TcpCommunicationSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/class-use/TcpCommunicationSpi.html
index 80f3b84..b4358bd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/class-use/TcpCommunicationSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/class-use/TcpCommunicationSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/communication/tcp/class-use/TcpCommunicationSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/class-use/TcpCommunicationSpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/class-use/TcpCommunicationSpiMBean.html
index 63856f6..22f8048 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/class-use/TcpCommunicationSpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/class-use/TcpCommunicationSpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/communication/tcp/class-use/TcpCommunicationSpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.communication.tcp.TcpCommunicationSpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/HandshakeMessage.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/HandshakeMessage.html
index 393479c..b530847 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/HandshakeMessage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/HandshakeMessage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/communication/tcp/messages/HandshakeMessage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>HandshakeMessage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/HandshakeMessage2.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/HandshakeMessage2.html
index 8a404d9..69b0db6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/HandshakeMessage2.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/HandshakeMessage2.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/communication/tcp/messages/HandshakeMessage2.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>HandshakeMessage2 (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/HandshakeWaitMessage.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/HandshakeWaitMessage.html
index ab57450..361a0dd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/HandshakeWaitMessage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/HandshakeWaitMessage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/communication/tcp/messages/HandshakeWaitMessage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>HandshakeWaitMessage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/NodeIdMessage.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/NodeIdMessage.html
index 8e7277e..7d41ee9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/NodeIdMessage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/NodeIdMessage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/communication/tcp/messages/NodeIdMessage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NodeIdMessage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/RecoveryLastReceivedMessage.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/RecoveryLastReceivedMessage.html
index 2396379..fc65cb7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/RecoveryLastReceivedMessage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/RecoveryLastReceivedMessage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/communication/tcp/messages/RecoveryLastReceivedMessage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>RecoveryLastReceivedMessage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/class-use/HandshakeMessage.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/class-use/HandshakeMessage.html
index 5ac2018..49d834d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/class-use/HandshakeMessage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/class-use/HandshakeMessage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/communication/tcp/messages/class-use/HandshakeMessage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.communication.tcp.messages.HandshakeMessage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/class-use/HandshakeMessage2.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/class-use/HandshakeMessage2.html
index 3c0e8db..fbaf9cb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/class-use/HandshakeMessage2.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/class-use/HandshakeMessage2.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/communication/tcp/messages/class-use/HandshakeMessage2.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.communication.tcp.messages.HandshakeMessage2 (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/class-use/HandshakeWaitMessage.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/class-use/HandshakeWaitMessage.html
index 722c754..21722e7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/class-use/HandshakeWaitMessage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/class-use/HandshakeWaitMessage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/communication/tcp/messages/class-use/HandshakeWaitMessage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.communication.tcp.messages.HandshakeWaitMessage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/class-use/NodeIdMessage.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/class-use/NodeIdMessage.html
index 1cf6a73..33e586a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/class-use/NodeIdMessage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/class-use/NodeIdMessage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/communication/tcp/messages/class-use/NodeIdMessage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.communication.tcp.messages.NodeIdMessage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/class-use/RecoveryLastReceivedMessage.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/class-use/RecoveryLastReceivedMessage.html
index 816a5ca..5c33454 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/class-use/RecoveryLastReceivedMessage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/class-use/RecoveryLastReceivedMessage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/communication/tcp/messages/class-use/RecoveryLastReceivedMessage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.communication.tcp.messages.RecoveryLastReceivedMessage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/package-frame.html
index 71f28d1..c5fd7f1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/communication/tcp/messages/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.communication.tcp.messages (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/package-summary.html
index 231a4bc..9c53400 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/communication/tcp/messages/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.communication.tcp.messages (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/package-tree.html
index 323ad7a..3df060f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/communication/tcp/messages/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.communication.tcp.messages Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/package-use.html
index 79ee3c2..0d5baa3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/messages/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/communication/tcp/messages/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.communication.tcp.messages (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/package-frame.html
index 643dc70..5b9dc56 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/communication/tcp/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.communication.tcp (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/package-summary.html
index 4cad064..f8241c3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/communication/tcp/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.communication.tcp (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/package-tree.html
index b870cd7..900db73 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/communication/tcp/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.communication.tcp Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/package-use.html
index 3adc34d..41b67f7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/communication/tcp/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/communication/tcp/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.communication.tcp (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/DeploymentListener.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/DeploymentListener.html
index 2aa25c8..c6ee0d6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/DeploymentListener.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/DeploymentListener.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/deployment/DeploymentListener.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DeploymentListener (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/DeploymentResource.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/DeploymentResource.html
index b143ac0..0e568c2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/DeploymentResource.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/DeploymentResource.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/deployment/DeploymentResource.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DeploymentResource (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/DeploymentResourceAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/DeploymentResourceAdapter.html
index f5a9778..507aff7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/DeploymentResourceAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/DeploymentResourceAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/deployment/DeploymentResourceAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DeploymentResourceAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/DeploymentSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/DeploymentSpi.html
index 0fdace6..dd196e0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/DeploymentSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/DeploymentSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/deployment/DeploymentSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DeploymentSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/IgnoreIfPeerClassLoadingDisabled.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/IgnoreIfPeerClassLoadingDisabled.html
index e8b6df1..c63e1b8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/IgnoreIfPeerClassLoadingDisabled.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/IgnoreIfPeerClassLoadingDisabled.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/deployment/IgnoreIfPeerClassLoadingDisabled.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgnoreIfPeerClassLoadingDisabled (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/class-use/DeploymentListener.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/class-use/DeploymentListener.html
index 05b86ea..67ad95c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/class-use/DeploymentListener.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/class-use/DeploymentListener.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/deployment/class-use/DeploymentListener.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.deployment.DeploymentListener (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/class-use/DeploymentResource.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/class-use/DeploymentResource.html
index 4fdc834..d92cc33 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/class-use/DeploymentResource.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/class-use/DeploymentResource.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/deployment/class-use/DeploymentResource.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.deployment.DeploymentResource (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/class-use/DeploymentResourceAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/class-use/DeploymentResourceAdapter.html
index 499eedf..dff58ad 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/class-use/DeploymentResourceAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/class-use/DeploymentResourceAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/deployment/class-use/DeploymentResourceAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.deployment.DeploymentResourceAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/class-use/DeploymentSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/class-use/DeploymentSpi.html
index b476b5d..a531c19 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/class-use/DeploymentSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/class-use/DeploymentSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/deployment/class-use/DeploymentSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.deployment.DeploymentSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/class-use/IgnoreIfPeerClassLoadingDisabled.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/class-use/IgnoreIfPeerClassLoadingDisabled.html
index 513526e..5485e23 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/class-use/IgnoreIfPeerClassLoadingDisabled.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/class-use/IgnoreIfPeerClassLoadingDisabled.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/deployment/class-use/IgnoreIfPeerClassLoadingDisabled.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.deployment.IgnoreIfPeerClassLoadingDisabled (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/local/LocalDeploymentSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/local/LocalDeploymentSpi.html
index 8bae1e6..b148e30 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/local/LocalDeploymentSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/local/LocalDeploymentSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/deployment/local/LocalDeploymentSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LocalDeploymentSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/local/LocalDeploymentSpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/local/LocalDeploymentSpiMBean.html
index c4a7c32..03c0d6c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/local/LocalDeploymentSpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/local/LocalDeploymentSpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/deployment/local/LocalDeploymentSpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LocalDeploymentSpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/local/class-use/LocalDeploymentSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/local/class-use/LocalDeploymentSpi.html
index 7d3ce4a..6ee6065 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/local/class-use/LocalDeploymentSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/local/class-use/LocalDeploymentSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/deployment/local/class-use/LocalDeploymentSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.deployment.local.LocalDeploymentSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/local/class-use/LocalDeploymentSpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/local/class-use/LocalDeploymentSpiMBean.html
index 39ff6a4..7c52d23 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/local/class-use/LocalDeploymentSpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/local/class-use/LocalDeploymentSpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/deployment/local/class-use/LocalDeploymentSpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.deployment.local.LocalDeploymentSpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/local/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/local/package-frame.html
index 43fa3eb..b94eaf4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/local/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/local/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/deployment/local/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.deployment.local (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/local/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/local/package-summary.html
index 08144df..a5f407b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/local/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/local/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/deployment/local/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.deployment.local (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/local/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/local/package-tree.html
index 4f01ba2..ef9b120 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/local/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/local/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/deployment/local/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.deployment.local Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/local/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/local/package-use.html
index 8b2aa30..a2f9199 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/local/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/local/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/deployment/local/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.deployment.local (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/package-frame.html
index 8d604e0..36cab26 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/deployment/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.deployment (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/package-summary.html
index 414651b..acd2085 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/deployment/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.deployment (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/package-tree.html
index 4b46333..4cebf37 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/deployment/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.deployment Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/package-use.html
index 9548544..7464bd1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/deployment/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.deployment (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/uri/UriDeploymentSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/uri/UriDeploymentSpi.html
index 990c161..1fa3518 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/uri/UriDeploymentSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/uri/UriDeploymentSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/deployment/uri/UriDeploymentSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>UriDeploymentSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/uri/UriDeploymentSpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/uri/UriDeploymentSpiMBean.html
index 463691d..1295b56 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/uri/UriDeploymentSpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/uri/UriDeploymentSpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/deployment/uri/UriDeploymentSpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>UriDeploymentSpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/uri/class-use/UriDeploymentSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/uri/class-use/UriDeploymentSpi.html
index bf56022..cf7482b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/uri/class-use/UriDeploymentSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/uri/class-use/UriDeploymentSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/deployment/uri/class-use/UriDeploymentSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.deployment.uri.UriDeploymentSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/uri/class-use/UriDeploymentSpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/uri/class-use/UriDeploymentSpiMBean.html
index bd052a2..14f7e02 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/uri/class-use/UriDeploymentSpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/uri/class-use/UriDeploymentSpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/deployment/uri/class-use/UriDeploymentSpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.deployment.uri.UriDeploymentSpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/uri/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/uri/package-frame.html
index be44cd2..1ba6c89 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/uri/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/uri/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/deployment/uri/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.deployment.uri (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/uri/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/uri/package-summary.html
index edf59dc..7d0b0ab 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/uri/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/uri/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/deployment/uri/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.deployment.uri (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/uri/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/uri/package-tree.html
index 3f306cb..756b36d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/uri/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/uri/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/deployment/uri/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.deployment.uri Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/uri/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/uri/package-use.html
index c905fb1..4fc029f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/uri/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/deployment/uri/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/deployment/uri/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.deployment.uri (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoveryDataBag.GridDiscoveryData.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoveryDataBag.GridDiscoveryData.html
index 55ac1ad..93714d6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoveryDataBag.GridDiscoveryData.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoveryDataBag.GridDiscoveryData.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/DiscoveryDataBag.GridDiscoveryData.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DiscoveryDataBag.GridDiscoveryData (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoveryDataBag.JoiningNodeDiscoveryData.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoveryDataBag.JoiningNodeDiscoveryData.html
index 47068fa..f1462d2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoveryDataBag.JoiningNodeDiscoveryData.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoveryDataBag.JoiningNodeDiscoveryData.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/DiscoveryDataBag.JoiningNodeDiscoveryData.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DiscoveryDataBag.JoiningNodeDiscoveryData (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoveryDataBag.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoveryDataBag.html
index 6ac9dd6..a04a4d3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoveryDataBag.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoveryDataBag.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/DiscoveryDataBag.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DiscoveryDataBag (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoveryMetricsProvider.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoveryMetricsProvider.html
index b533a29..7646a0c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoveryMetricsProvider.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoveryMetricsProvider.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/DiscoveryMetricsProvider.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DiscoveryMetricsProvider (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoveryNotification.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoveryNotification.html
index cfd5b59..a03bb64 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoveryNotification.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoveryNotification.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/DiscoveryNotification.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DiscoveryNotification (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpi.html
index 2fa9c43..b40bd05 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/DiscoverySpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DiscoverySpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiCustomMessage.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiCustomMessage.html
index 3072eec..8597587 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiCustomMessage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiCustomMessage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiCustomMessage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DiscoverySpiCustomMessage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiDataExchange.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiDataExchange.html
index 9833956..9f7bec3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiDataExchange.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiDataExchange.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiDataExchange.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DiscoverySpiDataExchange (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiHistorySupport.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiHistorySupport.html
index 4c5f913..86e2335 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiHistorySupport.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiHistorySupport.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiHistorySupport.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DiscoverySpiHistorySupport (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiListener.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiListener.html
index 2a13c02..ef00002 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiListener.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiListener.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiListener.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DiscoverySpiListener (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiMBean.html
index 68a3889..6e360f6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DiscoverySpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiMutableCustomMessageSupport.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiMutableCustomMessageSupport.html
index ac70152..4ca7f4d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiMutableCustomMessageSupport.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiMutableCustomMessageSupport.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiMutableCustomMessageSupport.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DiscoverySpiMutableCustomMessageSupport (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiNodeAuthenticator.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiNodeAuthenticator.html
index 709719c..4874021 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiNodeAuthenticator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiNodeAuthenticator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiNodeAuthenticator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DiscoverySpiNodeAuthenticator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiOrderSupport.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiOrderSupport.html
index dae5c9b..d5798a3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiOrderSupport.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiOrderSupport.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/DiscoverySpiOrderSupport.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DiscoverySpiOrderSupport (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/IgniteDiscoveryThread.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/IgniteDiscoveryThread.html
index a34dde9..e72042a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/IgniteDiscoveryThread.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/IgniteDiscoveryThread.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/IgniteDiscoveryThread.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteDiscoveryThread (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoveryDataBag.GridDiscoveryData.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoveryDataBag.GridDiscoveryData.html
index 6af0939..17a5148 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoveryDataBag.GridDiscoveryData.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoveryDataBag.GridDiscoveryData.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoveryDataBag.GridDiscoveryData.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.discovery.DiscoveryDataBag.GridDiscoveryData (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoveryDataBag.JoiningNodeDiscoveryData.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoveryDataBag.JoiningNodeDiscoveryData.html
index a7663fe..662ac73 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoveryDataBag.JoiningNodeDiscoveryData.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoveryDataBag.JoiningNodeDiscoveryData.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoveryDataBag.JoiningNodeDiscoveryData.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.discovery.DiscoveryDataBag.JoiningNodeDiscoveryData (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoveryDataBag.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoveryDataBag.html
index 95d0d97..06f795a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoveryDataBag.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoveryDataBag.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoveryDataBag.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.discovery.DiscoveryDataBag (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoveryMetricsProvider.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoveryMetricsProvider.html
index 8204df0..dc05323 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoveryMetricsProvider.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoveryMetricsProvider.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoveryMetricsProvider.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.discovery.DiscoveryMetricsProvider (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoveryNotification.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoveryNotification.html
index 0d8644b..6df926f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoveryNotification.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoveryNotification.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoveryNotification.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.discovery.DiscoveryNotification (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpi.html
index 8117451..51ade79 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.discovery.DiscoverySpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiCustomMessage.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiCustomMessage.html
index 20e8ac3..5361c1e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiCustomMessage.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiCustomMessage.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiCustomMessage.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.discovery.DiscoverySpiCustomMessage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiDataExchange.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiDataExchange.html
index a167d8b..462af1f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiDataExchange.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiDataExchange.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiDataExchange.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.discovery.DiscoverySpiDataExchange (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiHistorySupport.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiHistorySupport.html
index 7f5bf6c..2142662 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiHistorySupport.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiHistorySupport.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiHistorySupport.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.discovery.DiscoverySpiHistorySupport (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiListener.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiListener.html
index dc73a5e..7f756d4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiListener.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiListener.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiListener.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.discovery.DiscoverySpiListener (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiMBean.html
index 02f167c..98ac703 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.discovery.DiscoverySpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiMutableCustomMessageSupport.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiMutableCustomMessageSupport.html
index b0a9565..0462163 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiMutableCustomMessageSupport.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiMutableCustomMessageSupport.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiMutableCustomMessageSupport.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.discovery.DiscoverySpiMutableCustomMessageSupport (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiNodeAuthenticator.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiNodeAuthenticator.html
index 62cdd0a..e44565c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiNodeAuthenticator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiNodeAuthenticator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiNodeAuthenticator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.discovery.DiscoverySpiNodeAuthenticator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiOrderSupport.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiOrderSupport.html
index 1f933fc..ba25b71 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiOrderSupport.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiOrderSupport.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/class-use/DiscoverySpiOrderSupport.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.discovery.DiscoverySpiOrderSupport (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/IgniteDiscoveryThread.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/IgniteDiscoveryThread.html
index 061a4e1..18be3d3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/IgniteDiscoveryThread.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/class-use/IgniteDiscoveryThread.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/class-use/IgniteDiscoveryThread.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.discovery.IgniteDiscoveryThread (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/package-frame.html
index 8b9a2e1..73e8855 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/package-summary.html
index 5283d80..98c354a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/package-tree.html
index f48627a..eae2657 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/package-use.html
index feb0d33..5b96708 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.discovery (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.html
index 6ab52d9..243a48d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TcpDiscoverySpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiMBean.html
index c7e0e7b..fece8ef 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TcpDiscoverySpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/class-use/TcpDiscoverySpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/class-use/TcpDiscoverySpi.html
index 9f325d1..6a07da4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/class-use/TcpDiscoverySpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/class-use/TcpDiscoverySpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/class-use/TcpDiscoverySpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/class-use/TcpDiscoverySpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/class-use/TcpDiscoverySpiMBean.html
index f8236d5..bd4dc1d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/class-use/TcpDiscoverySpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/class-use/TcpDiscoverySpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/class-use/TcpDiscoverySpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/TcpDiscoveryIpFinder.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/TcpDiscoveryIpFinder.html
index 2a6961d..3648deb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/TcpDiscoveryIpFinder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/TcpDiscoveryIpFinder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/TcpDiscoveryIpFinder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TcpDiscoveryIpFinder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/TcpDiscoveryIpFinderAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/TcpDiscoveryIpFinderAdapter.html
index 78ca250..3cdfff2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/TcpDiscoveryIpFinderAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/TcpDiscoveryIpFinderAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/TcpDiscoveryIpFinderAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TcpDiscoveryIpFinderAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/class-use/TcpDiscoveryIpFinder.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/class-use/TcpDiscoveryIpFinder.html
index c8583c0..4c3e82e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/class-use/TcpDiscoveryIpFinder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/class-use/TcpDiscoveryIpFinder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/class-use/TcpDiscoveryIpFinder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/class-use/TcpDiscoveryIpFinderAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/class-use/TcpDiscoveryIpFinderAdapter.html
index 791fe80..2284247 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/class-use/TcpDiscoveryIpFinderAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/class-use/TcpDiscoveryIpFinderAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/class-use/TcpDiscoveryIpFinderAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinderAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/cloud/TcpDiscoveryCloudIpFinder.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/cloud/TcpDiscoveryCloudIpFinder.html
index f4b7f8a..9910962 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/cloud/TcpDiscoveryCloudIpFinder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/cloud/TcpDiscoveryCloudIpFinder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/cloud/TcpDiscoveryCloudIpFinder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TcpDiscoveryCloudIpFinder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/cloud/class-use/TcpDiscoveryCloudIpFinder.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/cloud/class-use/TcpDiscoveryCloudIpFinder.html
index 7172038..666fa7d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/cloud/class-use/TcpDiscoveryCloudIpFinder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/cloud/class-use/TcpDiscoveryCloudIpFinder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/cloud/class-use/TcpDiscoveryCloudIpFinder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.discovery.tcp.ipfinder.cloud.TcpDiscoveryCloudIpFinder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/cloud/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/cloud/package-frame.html
index d704a2a..8aca273 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/cloud/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/cloud/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/cloud/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder.cloud (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/cloud/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/cloud/package-summary.html
index 2ed84ad..a6a2f78 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/cloud/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/cloud/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/cloud/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder.cloud (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/cloud/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/cloud/package-tree.html
index 9888d87..8bf2858 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/cloud/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/cloud/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/cloud/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder.cloud Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/cloud/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/cloud/package-use.html
index b22537c..4c6a52c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/cloud/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/cloud/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/cloud/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.discovery.tcp.ipfinder.cloud (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/TcpDiscoveryAlbIpFinder.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/TcpDiscoveryAlbIpFinder.html
index 1768d61..4743c22 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/TcpDiscoveryAlbIpFinder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/TcpDiscoveryAlbIpFinder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/TcpDiscoveryAlbIpFinder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TcpDiscoveryAlbIpFinder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/TcpDiscoveryElbIpFinder.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/TcpDiscoveryElbIpFinder.html
index ee112d2..408dd12 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/TcpDiscoveryElbIpFinder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/TcpDiscoveryElbIpFinder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/TcpDiscoveryElbIpFinder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TcpDiscoveryElbIpFinder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/class-use/TcpDiscoveryAlbIpFinder.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/class-use/TcpDiscoveryAlbIpFinder.html
index 6178e6f..f3228e0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/class-use/TcpDiscoveryAlbIpFinder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/class-use/TcpDiscoveryAlbIpFinder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/class-use/TcpDiscoveryAlbIpFinder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.discovery.tcp.ipfinder.elb.TcpDiscoveryAlbIpFinder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/class-use/TcpDiscoveryElbIpFinder.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/class-use/TcpDiscoveryElbIpFinder.html
index f8f20b8..e524f4f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/class-use/TcpDiscoveryElbIpFinder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/class-use/TcpDiscoveryElbIpFinder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/class-use/TcpDiscoveryElbIpFinder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.discovery.tcp.ipfinder.elb.TcpDiscoveryElbIpFinder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/package-frame.html
index 0b921d7..a27a9f3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder.elb (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/package-summary.html
index 99fe827..5e2b69e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder.elb (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/package-tree.html
index 5daab6c..0628616 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder.elb Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/package-use.html
index 433d35f..5efad16 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/elb/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.discovery.tcp.ipfinder.elb (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/gce/TcpDiscoveryGoogleStorageIpFinder.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/gce/TcpDiscoveryGoogleStorageIpFinder.html
index a37f1d7..71b4f9e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/gce/TcpDiscoveryGoogleStorageIpFinder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/gce/TcpDiscoveryGoogleStorageIpFinder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/gce/TcpDiscoveryGoogleStorageIpFinder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TcpDiscoveryGoogleStorageIpFinder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/gce/class-use/TcpDiscoveryGoogleStorageIpFinder.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/gce/class-use/TcpDiscoveryGoogleStorageIpFinder.html
index 479d553..3f12059 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/gce/class-use/TcpDiscoveryGoogleStorageIpFinder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/gce/class-use/TcpDiscoveryGoogleStorageIpFinder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/gce/class-use/TcpDiscoveryGoogleStorageIpFinder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.discovery.tcp.ipfinder.gce.TcpDiscoveryGoogleStorageIpFinder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/gce/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/gce/package-frame.html
index be4a431..5ef8dd5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/gce/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/gce/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/gce/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder.gce (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/gce/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/gce/package-summary.html
index aed1db1..bc037f4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/gce/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/gce/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/gce/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder.gce (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/gce/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/gce/package-tree.html
index a24a6b8..e7b4d39 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/gce/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/gce/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/gce/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder.gce Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/gce/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/gce/package-use.html
index b8d3a31..d2fe210 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/gce/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/gce/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/gce/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.discovery.tcp.ipfinder.gce (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/BasicJdbcIpFinderDialect.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/BasicJdbcIpFinderDialect.html
index 1a7c084..9e33a2e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/BasicJdbcIpFinderDialect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/BasicJdbcIpFinderDialect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/BasicJdbcIpFinderDialect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BasicJdbcIpFinderDialect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/JdbcIpFinderDialect.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/JdbcIpFinderDialect.html
index 8ffaeec..8537b89 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/JdbcIpFinderDialect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/JdbcIpFinderDialect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/JdbcIpFinderDialect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>JdbcIpFinderDialect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/OracleJdbcIpFinderDialect.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/OracleJdbcIpFinderDialect.html
index 8a2ae3e..a53a0a4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/OracleJdbcIpFinderDialect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/OracleJdbcIpFinderDialect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/OracleJdbcIpFinderDialect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>OracleJdbcIpFinderDialect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/TcpDiscoveryJdbcIpFinder.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/TcpDiscoveryJdbcIpFinder.html
index 4e872a2..1287f61 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/TcpDiscoveryJdbcIpFinder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/TcpDiscoveryJdbcIpFinder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/TcpDiscoveryJdbcIpFinder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TcpDiscoveryJdbcIpFinder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/class-use/BasicJdbcIpFinderDialect.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/class-use/BasicJdbcIpFinderDialect.html
index 481eb1a..0467bc3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/class-use/BasicJdbcIpFinderDialect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/class-use/BasicJdbcIpFinderDialect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/class-use/BasicJdbcIpFinderDialect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.discovery.tcp.ipfinder.jdbc.BasicJdbcIpFinderDialect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/class-use/JdbcIpFinderDialect.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/class-use/JdbcIpFinderDialect.html
index c10e3db..b22eada 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/class-use/JdbcIpFinderDialect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/class-use/JdbcIpFinderDialect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/class-use/JdbcIpFinderDialect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.discovery.tcp.ipfinder.jdbc.JdbcIpFinderDialect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/class-use/OracleJdbcIpFinderDialect.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/class-use/OracleJdbcIpFinderDialect.html
index 075b600..3c89ac1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/class-use/OracleJdbcIpFinderDialect.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/class-use/OracleJdbcIpFinderDialect.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/class-use/OracleJdbcIpFinderDialect.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.discovery.tcp.ipfinder.jdbc.OracleJdbcIpFinderDialect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/class-use/TcpDiscoveryJdbcIpFinder.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/class-use/TcpDiscoveryJdbcIpFinder.html
index 55f2530..f1f44d0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/class-use/TcpDiscoveryJdbcIpFinder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/class-use/TcpDiscoveryJdbcIpFinder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/class-use/TcpDiscoveryJdbcIpFinder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.discovery.tcp.ipfinder.jdbc.TcpDiscoveryJdbcIpFinder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/package-frame.html
index 7bc3ed5..3d5e638 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder.jdbc (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/package-summary.html
index 7cb2f5c..cd28407 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder.jdbc (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/package-tree.html
index 58cc959..b113403 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder.jdbc Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/package-use.html
index 8aabe4b..28b0e07 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/jdbc/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.discovery.tcp.ipfinder.jdbc (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/kubernetes/TcpDiscoveryKubernetesIpFinder.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/kubernetes/TcpDiscoveryKubernetesIpFinder.html
index b42a386..ee2aa83 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/kubernetes/TcpDiscoveryKubernetesIpFinder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/kubernetes/TcpDiscoveryKubernetesIpFinder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/kubernetes/TcpDiscoveryKubernetesIpFinder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TcpDiscoveryKubernetesIpFinder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/kubernetes/class-use/TcpDiscoveryKubernetesIpFinder.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/kubernetes/class-use/TcpDiscoveryKubernetesIpFinder.html
index 406edde..6ad7248 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/kubernetes/class-use/TcpDiscoveryKubernetesIpFinder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/kubernetes/class-use/TcpDiscoveryKubernetesIpFinder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/kubernetes/class-use/TcpDiscoveryKubernetesIpFinder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.discovery.tcp.ipfinder.kubernetes.TcpDiscoveryKubernetesIpFinder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/kubernetes/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/kubernetes/package-frame.html
index bb25e00..b29b69a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/kubernetes/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/kubernetes/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/kubernetes/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder.kubernetes (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/kubernetes/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/kubernetes/package-summary.html
index 8649fa4..60f7092 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/kubernetes/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/kubernetes/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/kubernetes/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder.kubernetes (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/kubernetes/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/kubernetes/package-tree.html
index 225a49f..c4126a4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/kubernetes/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/kubernetes/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/kubernetes/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder.kubernetes Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/kubernetes/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/kubernetes/package-use.html
index 7ec3f96..5249385 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/kubernetes/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/kubernetes/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/kubernetes/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.discovery.tcp.ipfinder.kubernetes (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/TcpDiscoveryMulticastIpFinder.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/TcpDiscoveryMulticastIpFinder.html
index 7593e03..ffed459 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/TcpDiscoveryMulticastIpFinder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/TcpDiscoveryMulticastIpFinder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/TcpDiscoveryMulticastIpFinder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TcpDiscoveryMulticastIpFinder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/class-use/TcpDiscoveryMulticastIpFinder.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/class-use/TcpDiscoveryMulticastIpFinder.html
index 0aa9fd1..4851bc5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/class-use/TcpDiscoveryMulticastIpFinder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/class-use/TcpDiscoveryMulticastIpFinder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/class-use/TcpDiscoveryMulticastIpFinder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/package-frame.html
index d7c3472..62aa8d8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder.multicast (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/package-summary.html
index aaa8aeac..91ba6f8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder.multicast (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/package-tree.html
index 7475100..fbdcce8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder.multicast Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/package-use.html
index 71403d6..6f158b5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.discovery.tcp.ipfinder.multicast (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/package-frame.html
index 592244f..96bdffe 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/package-summary.html
index abfbfa0..c938146 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/package-tree.html
index d8ec75f..d0afdd7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/package-use.html
index 0059d4e..226f8cb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.discovery.tcp.ipfinder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/TcpDiscoveryS3IpFinder.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/TcpDiscoveryS3IpFinder.html
index f72a7fd..9fa0503 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/TcpDiscoveryS3IpFinder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/TcpDiscoveryS3IpFinder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/TcpDiscoveryS3IpFinder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TcpDiscoveryS3IpFinder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/class-use/TcpDiscoveryS3IpFinder.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/class-use/TcpDiscoveryS3IpFinder.html
index 15fa65b..87533d6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/class-use/TcpDiscoveryS3IpFinder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/class-use/TcpDiscoveryS3IpFinder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/class-use/TcpDiscoveryS3IpFinder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.discovery.tcp.ipfinder.s3.TcpDiscoveryS3IpFinder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/AsymmetricKeyEncryptionService.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/AsymmetricKeyEncryptionService.html
index 116ef3e..7ab7add 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/AsymmetricKeyEncryptionService.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/AsymmetricKeyEncryptionService.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/AsymmetricKeyEncryptionService.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>AsymmetricKeyEncryptionService (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/AwsKmsEncryptionService.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/AwsKmsEncryptionService.html
index 840bcd8..008e580 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/AwsKmsEncryptionService.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/AwsKmsEncryptionService.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/AwsKmsEncryptionService.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>AwsKmsEncryptionService (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/EncryptionService.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/EncryptionService.html
index 265a882..441ef72 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/EncryptionService.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/EncryptionService.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/EncryptionService.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>EncryptionService (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/SymmetricKeyEncryptionService.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/SymmetricKeyEncryptionService.html
index a7e3370..3ce5616 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/SymmetricKeyEncryptionService.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/SymmetricKeyEncryptionService.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/SymmetricKeyEncryptionService.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SymmetricKeyEncryptionService (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/class-use/AsymmetricKeyEncryptionService.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/class-use/AsymmetricKeyEncryptionService.html
index b0f5688..f553871 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/class-use/AsymmetricKeyEncryptionService.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/class-use/AsymmetricKeyEncryptionService.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/class-use/AsymmetricKeyEncryptionService.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.discovery.tcp.ipfinder.s3.encrypt.AsymmetricKeyEncryptionService (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/class-use/AwsKmsEncryptionService.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/class-use/AwsKmsEncryptionService.html
index 07d4389..645b175 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/class-use/AwsKmsEncryptionService.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/class-use/AwsKmsEncryptionService.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/class-use/AwsKmsEncryptionService.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.discovery.tcp.ipfinder.s3.encrypt.AwsKmsEncryptionService (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/class-use/EncryptionService.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/class-use/EncryptionService.html
index 2cb74e0..e4eaf9f9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/class-use/EncryptionService.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/class-use/EncryptionService.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/class-use/EncryptionService.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.discovery.tcp.ipfinder.s3.encrypt.EncryptionService (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/class-use/SymmetricKeyEncryptionService.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/class-use/SymmetricKeyEncryptionService.html
index d547182..86aeee2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/class-use/SymmetricKeyEncryptionService.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/class-use/SymmetricKeyEncryptionService.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/class-use/SymmetricKeyEncryptionService.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.discovery.tcp.ipfinder.s3.encrypt.SymmetricKeyEncryptionService (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/package-frame.html
index a7e2193..770514b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder.s3.encrypt (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/package-summary.html
index e711238..41e3250 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder.s3.encrypt (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/package-tree.html
index 89accae..7456822 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder.s3.encrypt Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/package-use.html
index a9bfbf8..132c648 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/encrypt/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.discovery.tcp.ipfinder.s3.encrypt (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/package-frame.html
index 289d09d..1411f9c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder.s3 (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/package-summary.html
index 90adf0d..c0ce8da 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder.s3 (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/package-tree.html
index 9d12892..4084835 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder.s3 Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/package-use.html
index 0a1dee7..d9e3c5d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/s3/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.discovery.tcp.ipfinder.s3 (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/sharedfs/TcpDiscoverySharedFsIpFinder.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/sharedfs/TcpDiscoverySharedFsIpFinder.html
index f19f343..1789488 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/sharedfs/TcpDiscoverySharedFsIpFinder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/sharedfs/TcpDiscoverySharedFsIpFinder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/sharedfs/TcpDiscoverySharedFsIpFinder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TcpDiscoverySharedFsIpFinder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/sharedfs/class-use/TcpDiscoverySharedFsIpFinder.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/sharedfs/class-use/TcpDiscoverySharedFsIpFinder.html
index a42efe7..0bfaefd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/sharedfs/class-use/TcpDiscoverySharedFsIpFinder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/sharedfs/class-use/TcpDiscoverySharedFsIpFinder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/sharedfs/class-use/TcpDiscoverySharedFsIpFinder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.discovery.tcp.ipfinder.sharedfs.TcpDiscoverySharedFsIpFinder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/sharedfs/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/sharedfs/package-frame.html
index 0377a12..2514765 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/sharedfs/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/sharedfs/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/sharedfs/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder.sharedfs (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/sharedfs/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/sharedfs/package-summary.html
index 4ac28ab..f140e86 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/sharedfs/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/sharedfs/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/sharedfs/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder.sharedfs (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/sharedfs/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/sharedfs/package-tree.html
index 8d32f30..8d58307 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/sharedfs/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/sharedfs/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/sharedfs/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder.sharedfs Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/sharedfs/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/sharedfs/package-use.html
index 961c892..446f9fa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/sharedfs/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/sharedfs/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/sharedfs/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.discovery.tcp.ipfinder.sharedfs (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/TcpDiscoveryVmIpFinder.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/TcpDiscoveryVmIpFinder.html
index 464ca35..2056c54 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/TcpDiscoveryVmIpFinder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/TcpDiscoveryVmIpFinder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/TcpDiscoveryVmIpFinder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TcpDiscoveryVmIpFinder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/class-use/TcpDiscoveryVmIpFinder.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/class-use/TcpDiscoveryVmIpFinder.html
index 6b84992..c2a71a4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/class-use/TcpDiscoveryVmIpFinder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/class-use/TcpDiscoveryVmIpFinder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/class-use/TcpDiscoveryVmIpFinder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/package-frame.html
index 183537d..33433f2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder.vm (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/package-summary.html
index 17bb78c..7911488 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder.vm (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/package-tree.html
index ce27f9a..188674e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder.vm Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/package-use.html
index 169bcef..c0ef743 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.discovery.tcp.ipfinder.vm (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/zk/TcpDiscoveryZookeeperIpFinder.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/zk/TcpDiscoveryZookeeperIpFinder.html
index 99fe954..dacb2ad 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/zk/TcpDiscoveryZookeeperIpFinder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/zk/TcpDiscoveryZookeeperIpFinder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/zk/TcpDiscoveryZookeeperIpFinder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TcpDiscoveryZookeeperIpFinder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/zk/class-use/TcpDiscoveryZookeeperIpFinder.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/zk/class-use/TcpDiscoveryZookeeperIpFinder.html
index 15367d8..cf58e3c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/zk/class-use/TcpDiscoveryZookeeperIpFinder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/zk/class-use/TcpDiscoveryZookeeperIpFinder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/zk/class-use/TcpDiscoveryZookeeperIpFinder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.discovery.tcp.ipfinder.zk.TcpDiscoveryZookeeperIpFinder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/zk/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/zk/package-frame.html
index 20fb063..f4232b5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/zk/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/zk/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/zk/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder.zk (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/zk/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/zk/package-summary.html
index 3deefc0..a8e2969 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/zk/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/zk/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/zk/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder.zk (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/zk/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/zk/package-tree.html
index 5ada1aa..0b468fd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/zk/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/zk/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/zk/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp.ipfinder.zk Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/zk/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/zk/package-use.html
index 631bb8d..c8bea63 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/zk/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/zk/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/zk/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.discovery.tcp.ipfinder.zk (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/package-frame.html
index b5f4d94..2be7d1e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/package-summary.html
index eff8914..f4a6dc1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/package-tree.html
index 4688283..d49d5ac 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.tcp Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/package-use.html
index fdf7d4f..008ffc5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/tcp/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.discovery.tcp (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/zk/ZookeeperDiscoverySpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/zk/ZookeeperDiscoverySpi.html
index c491015..8ef7242 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/zk/ZookeeperDiscoverySpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/zk/ZookeeperDiscoverySpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/zk/ZookeeperDiscoverySpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ZookeeperDiscoverySpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/zk/ZookeeperDiscoverySpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/zk/ZookeeperDiscoverySpiMBean.html
index fdd5477..238f1eb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/zk/ZookeeperDiscoverySpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/zk/ZookeeperDiscoverySpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/zk/ZookeeperDiscoverySpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ZookeeperDiscoverySpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/zk/class-use/ZookeeperDiscoverySpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/zk/class-use/ZookeeperDiscoverySpi.html
index b34a935..5fff7d9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/zk/class-use/ZookeeperDiscoverySpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/zk/class-use/ZookeeperDiscoverySpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/zk/class-use/ZookeeperDiscoverySpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.discovery.zk.ZookeeperDiscoverySpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/zk/class-use/ZookeeperDiscoverySpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/zk/class-use/ZookeeperDiscoverySpiMBean.html
index f57e9d2..48c7eb0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/zk/class-use/ZookeeperDiscoverySpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/zk/class-use/ZookeeperDiscoverySpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/zk/class-use/ZookeeperDiscoverySpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.discovery.zk.ZookeeperDiscoverySpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/zk/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/zk/package-frame.html
index 36bd2da..6d3328e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/zk/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/zk/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/zk/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.zk (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/zk/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/zk/package-summary.html
index cb66045..f5ae10d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/zk/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/zk/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/zk/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.zk (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/zk/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/zk/package-tree.html
index 50c3973..1fdb2be 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/zk/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/zk/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/zk/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.discovery.zk Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/zk/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/zk/package-use.html
index ccffc39..40004e5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/zk/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/discovery/zk/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/zk/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.discovery.zk (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/EncryptionSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/EncryptionSpi.html
index 4b0894f..a9f483a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/EncryptionSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/EncryptionSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/encryption/EncryptionSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>EncryptionSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/class-use/EncryptionSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/class-use/EncryptionSpi.html
index 574a9da..f67681a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/class-use/EncryptionSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/class-use/EncryptionSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/encryption/class-use/EncryptionSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.encryption.EncryptionSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/keystore/KeystoreEncryptionKey.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/keystore/KeystoreEncryptionKey.html
index 54a9059..5439e48 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/keystore/KeystoreEncryptionKey.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/keystore/KeystoreEncryptionKey.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/encryption/keystore/KeystoreEncryptionKey.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>KeystoreEncryptionKey (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/keystore/KeystoreEncryptionSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/keystore/KeystoreEncryptionSpi.html
index 2e1df82..866d2ae 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/keystore/KeystoreEncryptionSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/keystore/KeystoreEncryptionSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/encryption/keystore/KeystoreEncryptionSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>KeystoreEncryptionSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/keystore/class-use/KeystoreEncryptionKey.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/keystore/class-use/KeystoreEncryptionKey.html
index e06157b..e85d348 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/keystore/class-use/KeystoreEncryptionKey.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/keystore/class-use/KeystoreEncryptionKey.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/encryption/keystore/class-use/KeystoreEncryptionKey.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.encryption.keystore.KeystoreEncryptionKey (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/keystore/class-use/KeystoreEncryptionSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/keystore/class-use/KeystoreEncryptionSpi.html
index 4ec91a2..acaf70d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/keystore/class-use/KeystoreEncryptionSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/keystore/class-use/KeystoreEncryptionSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/encryption/keystore/class-use/KeystoreEncryptionSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.encryption.keystore.KeystoreEncryptionSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/keystore/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/keystore/package-frame.html
index e869cf8..cac910c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/keystore/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/keystore/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/encryption/keystore/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.encryption.keystore (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/keystore/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/keystore/package-summary.html
index 3bd82ca..e3b3a4c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/keystore/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/keystore/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/encryption/keystore/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.encryption.keystore (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/keystore/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/keystore/package-tree.html
index 93c6fa7..aaa5a4a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/keystore/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/keystore/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/encryption/keystore/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.encryption.keystore Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/keystore/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/keystore/package-use.html
index 23f71a4..c1751db 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/keystore/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/keystore/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/encryption/keystore/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.encryption.keystore (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/noop/NoopEncryptionSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/noop/NoopEncryptionSpi.html
index 09eaa0b..49f75de 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/noop/NoopEncryptionSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/noop/NoopEncryptionSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/encryption/noop/NoopEncryptionSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NoopEncryptionSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/noop/class-use/NoopEncryptionSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/noop/class-use/NoopEncryptionSpi.html
index 22f1a56..ceb4d5b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/noop/class-use/NoopEncryptionSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/noop/class-use/NoopEncryptionSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/encryption/noop/class-use/NoopEncryptionSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.encryption.noop.NoopEncryptionSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/noop/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/noop/package-frame.html
index 92fef82..8da2487 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/noop/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/noop/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/encryption/noop/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.encryption.noop (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/noop/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/noop/package-summary.html
index 394f044..7753b7d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/noop/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/noop/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/encryption/noop/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.encryption.noop (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/noop/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/noop/package-tree.html
index e33ebbb..cd739ce 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/noop/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/noop/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/encryption/noop/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.encryption.noop Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/noop/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/noop/package-use.html
index fdcfefc..895a5df 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/noop/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/noop/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/encryption/noop/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.encryption.noop (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/package-frame.html
index 58be83d..67a44f9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/encryption/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.encryption (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/package-summary.html
index 679e31b..42a6a2e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/encryption/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.encryption (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/package-tree.html
index e54eb49..4e386bf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/encryption/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.encryption Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/package-use.html
index 2897a2d..cab8d1c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/encryption/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/encryption/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.encryption (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/EventStorageSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/EventStorageSpi.html
index 6233538..aa6148c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/EventStorageSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/EventStorageSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/eventstorage/EventStorageSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>EventStorageSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/NoopEventStorageSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/NoopEventStorageSpi.html
index bc0be99..b3636d7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/NoopEventStorageSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/NoopEventStorageSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/eventstorage/NoopEventStorageSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NoopEventStorageSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/class-use/EventStorageSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/class-use/EventStorageSpi.html
index b8a0b69..7aa9008 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/class-use/EventStorageSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/class-use/EventStorageSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/eventstorage/class-use/EventStorageSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.eventstorage.EventStorageSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/class-use/NoopEventStorageSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/class-use/NoopEventStorageSpi.html
index dd241e3..958ebb1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/class-use/NoopEventStorageSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/class-use/NoopEventStorageSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/eventstorage/class-use/NoopEventStorageSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.eventstorage.NoopEventStorageSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/memory/MemoryEventStorageSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/memory/MemoryEventStorageSpi.html
index 1fd5703..c788eb1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/memory/MemoryEventStorageSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/memory/MemoryEventStorageSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/eventstorage/memory/MemoryEventStorageSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MemoryEventStorageSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/memory/MemoryEventStorageSpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/memory/MemoryEventStorageSpiMBean.html
index aa0b4e8..e7970af 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/memory/MemoryEventStorageSpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/memory/MemoryEventStorageSpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/eventstorage/memory/MemoryEventStorageSpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MemoryEventStorageSpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/memory/class-use/MemoryEventStorageSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/memory/class-use/MemoryEventStorageSpi.html
index 242ab00..edd063c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/memory/class-use/MemoryEventStorageSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/memory/class-use/MemoryEventStorageSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/eventstorage/memory/class-use/MemoryEventStorageSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.eventstorage.memory.MemoryEventStorageSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/memory/class-use/MemoryEventStorageSpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/memory/class-use/MemoryEventStorageSpiMBean.html
index 4c1df4f..5e1815b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/memory/class-use/MemoryEventStorageSpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/memory/class-use/MemoryEventStorageSpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/eventstorage/memory/class-use/MemoryEventStorageSpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.eventstorage.memory.MemoryEventStorageSpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/memory/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/memory/package-frame.html
index 6ffdf02..aed2fb6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/memory/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/memory/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/eventstorage/memory/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.eventstorage.memory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/memory/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/memory/package-summary.html
index e8952dc..04e0e6e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/memory/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/memory/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/eventstorage/memory/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.eventstorage.memory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/memory/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/memory/package-tree.html
index 61dc4b1..9e80c65 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/memory/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/memory/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/eventstorage/memory/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.eventstorage.memory Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/memory/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/memory/package-use.html
index 20b377c..e0878f3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/memory/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/memory/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/eventstorage/memory/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.eventstorage.memory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/package-frame.html
index d111302..5aa2e43 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/eventstorage/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.eventstorage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/package-summary.html
index b4e84eb..36d3f23 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/eventstorage/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.eventstorage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/package-tree.html
index fbdfabe..b6930d2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/eventstorage/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.eventstorage Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/package-use.html
index e17b1af..9837fb0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/eventstorage/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/eventstorage/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.eventstorage (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/FailoverContext.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/FailoverContext.html
index 83abd3a..9dfc352 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/FailoverContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/FailoverContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/failover/FailoverContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>FailoverContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/FailoverSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/FailoverSpi.html
index 33f2ab7..f78bf65 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/FailoverSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/FailoverSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/failover/FailoverSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>FailoverSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/always/AlwaysFailoverSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/always/AlwaysFailoverSpi.html
index 3226a46..22f9b32 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/always/AlwaysFailoverSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/always/AlwaysFailoverSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/failover/always/AlwaysFailoverSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>AlwaysFailoverSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/always/AlwaysFailoverSpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/always/AlwaysFailoverSpiMBean.html
index fd9d6c2..de534ed 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/always/AlwaysFailoverSpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/always/AlwaysFailoverSpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/failover/always/AlwaysFailoverSpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>AlwaysFailoverSpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/always/class-use/AlwaysFailoverSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/always/class-use/AlwaysFailoverSpi.html
index 58d59bd..eeff1f2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/always/class-use/AlwaysFailoverSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/always/class-use/AlwaysFailoverSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/failover/always/class-use/AlwaysFailoverSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.failover.always.AlwaysFailoverSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/always/class-use/AlwaysFailoverSpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/always/class-use/AlwaysFailoverSpiMBean.html
index 54b00ed..3603a69 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/always/class-use/AlwaysFailoverSpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/always/class-use/AlwaysFailoverSpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/failover/always/class-use/AlwaysFailoverSpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.failover.always.AlwaysFailoverSpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/always/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/always/package-frame.html
index 70049f0..0a44dea 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/always/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/always/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/failover/always/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.failover.always (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/always/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/always/package-summary.html
index ffb234b..903d613 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/always/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/always/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/failover/always/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.failover.always (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/always/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/always/package-tree.html
index 450df8a..20fb225 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/always/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/always/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/failover/always/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.failover.always Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/always/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/always/package-use.html
index 09ab880..827654a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/always/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/always/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/failover/always/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.failover.always (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/class-use/FailoverContext.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/class-use/FailoverContext.html
index f38cc7f..86fadff 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/class-use/FailoverContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/class-use/FailoverContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/failover/class-use/FailoverContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.failover.FailoverContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/class-use/FailoverSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/class-use/FailoverSpi.html
index 8c524f5..18be469 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/class-use/FailoverSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/class-use/FailoverSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/failover/class-use/FailoverSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.failover.FailoverSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/jobstealing/JobStealingFailoverSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/jobstealing/JobStealingFailoverSpi.html
index 59b9716..186d29b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/jobstealing/JobStealingFailoverSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/jobstealing/JobStealingFailoverSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/failover/jobstealing/JobStealingFailoverSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>JobStealingFailoverSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/jobstealing/JobStealingFailoverSpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/jobstealing/JobStealingFailoverSpiMBean.html
index cbf7f32..bdb3f80 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/jobstealing/JobStealingFailoverSpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/jobstealing/JobStealingFailoverSpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/failover/jobstealing/JobStealingFailoverSpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>JobStealingFailoverSpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/jobstealing/class-use/JobStealingFailoverSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/jobstealing/class-use/JobStealingFailoverSpi.html
index 0616bec..21432d1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/jobstealing/class-use/JobStealingFailoverSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/jobstealing/class-use/JobStealingFailoverSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/failover/jobstealing/class-use/JobStealingFailoverSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.failover.jobstealing.JobStealingFailoverSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/jobstealing/class-use/JobStealingFailoverSpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/jobstealing/class-use/JobStealingFailoverSpiMBean.html
index c72b8c1..035f410 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/jobstealing/class-use/JobStealingFailoverSpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/jobstealing/class-use/JobStealingFailoverSpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/failover/jobstealing/class-use/JobStealingFailoverSpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.failover.jobstealing.JobStealingFailoverSpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/jobstealing/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/jobstealing/package-frame.html
index a863481..c4bfd4a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/jobstealing/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/jobstealing/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/failover/jobstealing/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.failover.jobstealing (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/jobstealing/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/jobstealing/package-summary.html
index d26cf6b..aaa7802 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/jobstealing/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/jobstealing/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/failover/jobstealing/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.failover.jobstealing (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/jobstealing/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/jobstealing/package-tree.html
index ffc1cd0..3df896b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/jobstealing/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/jobstealing/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/failover/jobstealing/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.failover.jobstealing Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/jobstealing/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/jobstealing/package-use.html
index edffe5c..aae7a6a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/jobstealing/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/jobstealing/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/failover/jobstealing/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.failover.jobstealing (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/never/NeverFailoverSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/never/NeverFailoverSpi.html
index f794f46..93a08ce 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/never/NeverFailoverSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/never/NeverFailoverSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/failover/never/NeverFailoverSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NeverFailoverSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/never/NeverFailoverSpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/never/NeverFailoverSpiMBean.html
index 8498c5e..f90545b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/never/NeverFailoverSpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/never/NeverFailoverSpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/failover/never/NeverFailoverSpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NeverFailoverSpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/never/class-use/NeverFailoverSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/never/class-use/NeverFailoverSpi.html
index c95c807..7437e0c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/never/class-use/NeverFailoverSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/never/class-use/NeverFailoverSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/failover/never/class-use/NeverFailoverSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.failover.never.NeverFailoverSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/never/class-use/NeverFailoverSpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/never/class-use/NeverFailoverSpiMBean.html
index 27f8d84..7d1496f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/never/class-use/NeverFailoverSpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/never/class-use/NeverFailoverSpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/failover/never/class-use/NeverFailoverSpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.failover.never.NeverFailoverSpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/never/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/never/package-frame.html
index fd2de33..a36da93 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/never/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/never/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/failover/never/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.failover.never (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/never/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/never/package-summary.html
index 181fd2c..7356971 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/never/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/never/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/failover/never/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.failover.never (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/never/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/never/package-tree.html
index d353d8c..7d0ed8c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/never/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/never/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/failover/never/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.failover.never Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/never/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/never/package-use.html
index b2bd19a..a682dcc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/never/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/never/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/failover/never/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.failover.never (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/package-frame.html
index 41cfc86..40a2b46 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/failover/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.failover (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/package-summary.html
index 02f8d74..2eff689 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/failover/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.failover (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/package-tree.html
index b1ccc6e..37fbe3b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/failover/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.failover Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/package-use.html
index c6c16d6..122804e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/failover/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/failover/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.failover (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/IndexingQueryCacheFilter.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/IndexingQueryCacheFilter.html
index cc00a8d..742767c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/IndexingQueryCacheFilter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/IndexingQueryCacheFilter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/indexing/IndexingQueryCacheFilter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IndexingQueryCacheFilter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/IndexingQueryFilter.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/IndexingQueryFilter.html
index a60aef5..638a6ce 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/IndexingQueryFilter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/IndexingQueryFilter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/indexing/IndexingQueryFilter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IndexingQueryFilter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/IndexingQueryFilterImpl.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/IndexingQueryFilterImpl.html
index cbba048..b5400e5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/IndexingQueryFilterImpl.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/IndexingQueryFilterImpl.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/indexing/IndexingQueryFilterImpl.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IndexingQueryFilterImpl (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/IndexingSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/IndexingSpi.html
index 40e0f97..345ca7b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/IndexingSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/IndexingSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/indexing/IndexingSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IndexingSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/class-use/IndexingQueryCacheFilter.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/class-use/IndexingQueryCacheFilter.html
index f70163c..7000fcf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/class-use/IndexingQueryCacheFilter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/class-use/IndexingQueryCacheFilter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/indexing/class-use/IndexingQueryCacheFilter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.indexing.IndexingQueryCacheFilter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/class-use/IndexingQueryFilter.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/class-use/IndexingQueryFilter.html
index 1a4aa44..58a64b8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/class-use/IndexingQueryFilter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/class-use/IndexingQueryFilter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/indexing/class-use/IndexingQueryFilter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.indexing.IndexingQueryFilter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/class-use/IndexingQueryFilterImpl.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/class-use/IndexingQueryFilterImpl.html
index c4b952d..87313f0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/class-use/IndexingQueryFilterImpl.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/class-use/IndexingQueryFilterImpl.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/indexing/class-use/IndexingQueryFilterImpl.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.indexing.IndexingQueryFilterImpl (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/class-use/IndexingSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/class-use/IndexingSpi.html
index eff137e..1a59ac0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/class-use/IndexingSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/class-use/IndexingSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/indexing/class-use/IndexingSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.indexing.IndexingSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/noop/NoopIndexingSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/noop/NoopIndexingSpi.html
index 31c1c28..7c8e37f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/noop/NoopIndexingSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/noop/NoopIndexingSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/indexing/noop/NoopIndexingSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NoopIndexingSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/noop/class-use/NoopIndexingSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/noop/class-use/NoopIndexingSpi.html
index a9cefd3..6fd2069 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/noop/class-use/NoopIndexingSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/noop/class-use/NoopIndexingSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/indexing/noop/class-use/NoopIndexingSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.indexing.noop.NoopIndexingSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/noop/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/noop/package-frame.html
index f19bac3..6560cb4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/noop/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/noop/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/indexing/noop/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.indexing.noop (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/noop/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/noop/package-summary.html
index 059fb06..1d1370b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/noop/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/noop/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/indexing/noop/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.indexing.noop (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/noop/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/noop/package-tree.html
index 246e113..6fe7f7d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/noop/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/noop/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/indexing/noop/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.indexing.noop Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/noop/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/noop/package-use.html
index de1df57..29f7936 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/noop/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/noop/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/indexing/noop/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.indexing.noop (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/package-frame.html
index 4bd6677..b70fe80 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/indexing/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.indexing (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/package-summary.html
index 888ddd2..4e33bde 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/indexing/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.indexing (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/package-tree.html
index 19b0672..42014c9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/indexing/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.indexing Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/package-use.html
index c6a21e5..6ef6d08 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/indexing/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/indexing/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.indexing (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/LoadBalancingSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/LoadBalancingSpi.html
index 6aeb599..1f2b024 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/LoadBalancingSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/LoadBalancingSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/LoadBalancingSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LoadBalancingSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/AdaptiveCpuLoadProbe.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/AdaptiveCpuLoadProbe.html
index e216005..a7aa7a6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/AdaptiveCpuLoadProbe.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/AdaptiveCpuLoadProbe.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/AdaptiveCpuLoadProbe.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>AdaptiveCpuLoadProbe (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/AdaptiveJobCountLoadProbe.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/AdaptiveJobCountLoadProbe.html
index 5ef06e5..e535796 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/AdaptiveJobCountLoadProbe.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/AdaptiveJobCountLoadProbe.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/AdaptiveJobCountLoadProbe.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>AdaptiveJobCountLoadProbe (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/AdaptiveLoadBalancingSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/AdaptiveLoadBalancingSpi.html
index 98155ce..e6ea864 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/AdaptiveLoadBalancingSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/AdaptiveLoadBalancingSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/AdaptiveLoadBalancingSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>AdaptiveLoadBalancingSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/AdaptiveLoadBalancingSpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/AdaptiveLoadBalancingSpiMBean.html
index 7155395..8d8d52d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/AdaptiveLoadBalancingSpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/AdaptiveLoadBalancingSpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/AdaptiveLoadBalancingSpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>AdaptiveLoadBalancingSpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/AdaptiveLoadProbe.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/AdaptiveLoadProbe.html
index add62fe..d557837 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/AdaptiveLoadProbe.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/AdaptiveLoadProbe.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/AdaptiveLoadProbe.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>AdaptiveLoadProbe (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/AdaptiveProcessingTimeLoadProbe.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/AdaptiveProcessingTimeLoadProbe.html
index 4898767..248cb59 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/AdaptiveProcessingTimeLoadProbe.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/AdaptiveProcessingTimeLoadProbe.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/AdaptiveProcessingTimeLoadProbe.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>AdaptiveProcessingTimeLoadProbe (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/class-use/AdaptiveCpuLoadProbe.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/class-use/AdaptiveCpuLoadProbe.html
index 4b891b2..12689dd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/class-use/AdaptiveCpuLoadProbe.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/class-use/AdaptiveCpuLoadProbe.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/class-use/AdaptiveCpuLoadProbe.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.loadbalancing.adaptive.AdaptiveCpuLoadProbe (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/class-use/AdaptiveJobCountLoadProbe.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/class-use/AdaptiveJobCountLoadProbe.html
index 1f767ca..d0c3481 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/class-use/AdaptiveJobCountLoadProbe.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/class-use/AdaptiveJobCountLoadProbe.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/class-use/AdaptiveJobCountLoadProbe.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.loadbalancing.adaptive.AdaptiveJobCountLoadProbe (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/class-use/AdaptiveLoadBalancingSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/class-use/AdaptiveLoadBalancingSpi.html
index 1bc720f..c32534b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/class-use/AdaptiveLoadBalancingSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/class-use/AdaptiveLoadBalancingSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/class-use/AdaptiveLoadBalancingSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.loadbalancing.adaptive.AdaptiveLoadBalancingSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/class-use/AdaptiveLoadBalancingSpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/class-use/AdaptiveLoadBalancingSpiMBean.html
index 4dd52ec..7d37dae 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/class-use/AdaptiveLoadBalancingSpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/class-use/AdaptiveLoadBalancingSpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/class-use/AdaptiveLoadBalancingSpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.loadbalancing.adaptive.AdaptiveLoadBalancingSpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/class-use/AdaptiveLoadProbe.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/class-use/AdaptiveLoadProbe.html
index 80f3772..5f0cd0e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/class-use/AdaptiveLoadProbe.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/class-use/AdaptiveLoadProbe.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/class-use/AdaptiveLoadProbe.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.loadbalancing.adaptive.AdaptiveLoadProbe (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/class-use/AdaptiveProcessingTimeLoadProbe.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/class-use/AdaptiveProcessingTimeLoadProbe.html
index 92c7128..36e36cd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/class-use/AdaptiveProcessingTimeLoadProbe.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/class-use/AdaptiveProcessingTimeLoadProbe.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/class-use/AdaptiveProcessingTimeLoadProbe.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.loadbalancing.adaptive.AdaptiveProcessingTimeLoadProbe (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/package-frame.html
index 0598d26..00e14e1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.loadbalancing.adaptive (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/package-summary.html
index 73c0a74..a2acb6d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.loadbalancing.adaptive (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/package-tree.html
index e45d7a7..3df346c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.loadbalancing.adaptive Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/package-use.html
index 0ac45ac..41b3543 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/adaptive/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.loadbalancing.adaptive (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/class-use/LoadBalancingSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/class-use/LoadBalancingSpi.html
index a66628d..5c190f5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/class-use/LoadBalancingSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/class-use/LoadBalancingSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/class-use/LoadBalancingSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.loadbalancing.LoadBalancingSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/package-frame.html
index 21825cd..62e7ba1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.loadbalancing (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/package-summary.html
index aa8551c..4eb450c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.loadbalancing (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/package-tree.html
index fa7ba1f..648d52c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.loadbalancing Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/package-use.html
index 7630f79..7551c79 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.loadbalancing (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/RoundRobinLoadBalancingSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/RoundRobinLoadBalancingSpi.html
index ae557a2..971655c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/RoundRobinLoadBalancingSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/RoundRobinLoadBalancingSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/RoundRobinLoadBalancingSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>RoundRobinLoadBalancingSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/RoundRobinLoadBalancingSpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/RoundRobinLoadBalancingSpiMBean.html
index 360133c..61d271e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/RoundRobinLoadBalancingSpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/RoundRobinLoadBalancingSpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/RoundRobinLoadBalancingSpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>RoundRobinLoadBalancingSpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/class-use/RoundRobinLoadBalancingSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/class-use/RoundRobinLoadBalancingSpi.html
index 8460642..0cc8399 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/class-use/RoundRobinLoadBalancingSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/class-use/RoundRobinLoadBalancingSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/class-use/RoundRobinLoadBalancingSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.loadbalancing.roundrobin.RoundRobinLoadBalancingSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/class-use/RoundRobinLoadBalancingSpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/class-use/RoundRobinLoadBalancingSpiMBean.html
index 8ce682c..1f12931 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/class-use/RoundRobinLoadBalancingSpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/class-use/RoundRobinLoadBalancingSpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/class-use/RoundRobinLoadBalancingSpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.loadbalancing.roundrobin.RoundRobinLoadBalancingSpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/package-frame.html
index 508c845..13b304d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.loadbalancing.roundrobin (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/package-summary.html
index c2a23d6..82c9ddf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.loadbalancing.roundrobin (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/package-tree.html
index d52843b..94516e9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.loadbalancing.roundrobin Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/package-use.html
index c9f4d9d..3d7a482 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/roundrobin/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.loadbalancing.roundrobin (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/WeightedRandomLoadBalancingSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/WeightedRandomLoadBalancingSpi.html
index 6a97246..3b31252 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/WeightedRandomLoadBalancingSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/WeightedRandomLoadBalancingSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/WeightedRandomLoadBalancingSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>WeightedRandomLoadBalancingSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/WeightedRandomLoadBalancingSpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/WeightedRandomLoadBalancingSpiMBean.html
index e57bc88..ac3e067 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/WeightedRandomLoadBalancingSpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/WeightedRandomLoadBalancingSpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/WeightedRandomLoadBalancingSpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>WeightedRandomLoadBalancingSpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/class-use/WeightedRandomLoadBalancingSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/class-use/WeightedRandomLoadBalancingSpi.html
index ddc522c..30fedfa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/class-use/WeightedRandomLoadBalancingSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/class-use/WeightedRandomLoadBalancingSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/class-use/WeightedRandomLoadBalancingSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.loadbalancing.weightedrandom.WeightedRandomLoadBalancingSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/class-use/WeightedRandomLoadBalancingSpiMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/class-use/WeightedRandomLoadBalancingSpiMBean.html
index 41bea6c..06fe6e1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/class-use/WeightedRandomLoadBalancingSpiMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/class-use/WeightedRandomLoadBalancingSpiMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/class-use/WeightedRandomLoadBalancingSpiMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.loadbalancing.weightedrandom.WeightedRandomLoadBalancingSpiMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/package-frame.html
index 869bcbd..f7730a0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.loadbalancing.weightedrandom (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/package-summary.html
index 9d620bc..9882ce5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.loadbalancing.weightedrandom (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/package-tree.html
index f37d979..a33c200 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.loadbalancing.weightedrandom Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/package-use.html
index 2867e30..24bdb32 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/loadbalancing/weightedrandom/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.loadbalancing.weightedrandom (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/BooleanMetric.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/BooleanMetric.html
index 0e8bc4e..eefc91d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/BooleanMetric.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/BooleanMetric.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/BooleanMetric.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BooleanMetric (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/DoubleMetric.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/DoubleMetric.html
index 1f75ba8..54ae049 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/DoubleMetric.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/DoubleMetric.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/DoubleMetric.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DoubleMetric (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/HistogramMetric.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/HistogramMetric.html
index 15254e5..5620a23 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/HistogramMetric.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/HistogramMetric.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/HistogramMetric.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>HistogramMetric (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/IntMetric.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/IntMetric.html
index e1bba2b..9fac33e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/IntMetric.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/IntMetric.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/IntMetric.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IntMetric (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/LongMetric.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/LongMetric.html
index c85788e..0d2b54d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/LongMetric.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/LongMetric.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/LongMetric.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LongMetric (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/Metric.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/Metric.html
index 589cbe5..5f2ffbd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/Metric.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/Metric.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/Metric.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Metric (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/MetricExporterSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/MetricExporterSpi.html
index 5cb22f0..67b7616 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/MetricExporterSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/MetricExporterSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/MetricExporterSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MetricExporterSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/ObjectMetric.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/ObjectMetric.html
index bdf4650..e1ca4d5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/ObjectMetric.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/ObjectMetric.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/ObjectMetric.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ObjectMetric (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/ReadOnlyMetricManager.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/ReadOnlyMetricManager.html
index 5716c89..134229b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/ReadOnlyMetricManager.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/ReadOnlyMetricManager.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/ReadOnlyMetricManager.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ReadOnlyMetricManager (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/ReadOnlyMetricRegistry.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/ReadOnlyMetricRegistry.html
index 64d5b6c..6a97d21 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/ReadOnlyMetricRegistry.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/ReadOnlyMetricRegistry.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/ReadOnlyMetricRegistry.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ReadOnlyMetricRegistry (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/BooleanMetric.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/BooleanMetric.html
index 769d81e..ea8d58c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/BooleanMetric.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/BooleanMetric.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/class-use/BooleanMetric.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.metric.BooleanMetric (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/DoubleMetric.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/DoubleMetric.html
index 77f6df7..c70fff8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/DoubleMetric.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/DoubleMetric.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/class-use/DoubleMetric.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.metric.DoubleMetric (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/HistogramMetric.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/HistogramMetric.html
index f10398a..889c573 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/HistogramMetric.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/HistogramMetric.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/class-use/HistogramMetric.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.metric.HistogramMetric (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/IntMetric.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/IntMetric.html
index 04bdb64..c53d6b8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/IntMetric.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/IntMetric.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/class-use/IntMetric.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.metric.IntMetric (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/LongMetric.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/LongMetric.html
index 2e32205..160a8a7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/LongMetric.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/LongMetric.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/class-use/LongMetric.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.metric.LongMetric (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/Metric.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/Metric.html
index ad224e6..040e543 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/Metric.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/Metric.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/class-use/Metric.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.metric.Metric (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/MetricExporterSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/MetricExporterSpi.html
index ad3a97e..59460f1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/MetricExporterSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/MetricExporterSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/class-use/MetricExporterSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.metric.MetricExporterSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/ObjectMetric.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/ObjectMetric.html
index 26f6347..03ffab5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/ObjectMetric.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/ObjectMetric.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/class-use/ObjectMetric.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.metric.ObjectMetric (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/ReadOnlyMetricManager.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/ReadOnlyMetricManager.html
index 6c9d139..ac1bb21 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/ReadOnlyMetricManager.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/ReadOnlyMetricManager.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/class-use/ReadOnlyMetricManager.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.metric.ReadOnlyMetricManager (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/ReadOnlyMetricRegistry.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/ReadOnlyMetricRegistry.html
index 8f3b31e..7eb77d6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/ReadOnlyMetricRegistry.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/class-use/ReadOnlyMetricRegistry.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/class-use/ReadOnlyMetricRegistry.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.metric.ReadOnlyMetricRegistry (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/JmxMetricExporterSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/JmxMetricExporterSpi.html
index f5cda45..264288c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/JmxMetricExporterSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/JmxMetricExporterSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/jmx/JmxMetricExporterSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>JmxMetricExporterSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/MetricRegistryMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/MetricRegistryMBean.html
index 0b5f7f2..fa3c30b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/MetricRegistryMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/MetricRegistryMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/jmx/MetricRegistryMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MetricRegistryMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/ReadOnlyDynamicMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/ReadOnlyDynamicMBean.html
index 98690d6..ff86b43 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/ReadOnlyDynamicMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/ReadOnlyDynamicMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/jmx/ReadOnlyDynamicMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ReadOnlyDynamicMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/class-use/JmxMetricExporterSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/class-use/JmxMetricExporterSpi.html
index cd1530d..b90e964 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/class-use/JmxMetricExporterSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/class-use/JmxMetricExporterSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/jmx/class-use/JmxMetricExporterSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.metric.jmx.JmxMetricExporterSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/class-use/MetricRegistryMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/class-use/MetricRegistryMBean.html
index 6648a7b..d8fe606 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/class-use/MetricRegistryMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/class-use/MetricRegistryMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/jmx/class-use/MetricRegistryMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.metric.jmx.MetricRegistryMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/class-use/ReadOnlyDynamicMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/class-use/ReadOnlyDynamicMBean.html
index eb71e71..0e93fe3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/class-use/ReadOnlyDynamicMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/class-use/ReadOnlyDynamicMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/jmx/class-use/ReadOnlyDynamicMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.metric.jmx.ReadOnlyDynamicMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/package-frame.html
index 89c7c7b..f528db0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/jmx/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.metric.jmx (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/package-summary.html
index 2b78f1d..630a234 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/jmx/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.metric.jmx (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/package-tree.html
index e0693f2..f803ab9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/jmx/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.metric.jmx Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/package-use.html
index 8c183e0..455be16 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/jmx/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/jmx/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.metric.jmx (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/log/LogExporterSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/log/LogExporterSpi.html
index 18f4ee9..0873025 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/log/LogExporterSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/log/LogExporterSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/log/LogExporterSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>LogExporterSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/log/class-use/LogExporterSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/log/class-use/LogExporterSpi.html
index 7d901b1..bc6733d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/log/class-use/LogExporterSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/log/class-use/LogExporterSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/log/class-use/LogExporterSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.metric.log.LogExporterSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/log/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/log/package-frame.html
index bd9fc11..b03c9e6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/log/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/log/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/log/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.metric.log (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/log/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/log/package-summary.html
index 3b04f67..d768e2f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/log/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/log/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/log/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.metric.log (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/log/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/log/package-tree.html
index 645b794..444ad27 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/log/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/log/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/log/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.metric.log Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/log/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/log/package-use.html
index 641f170..ae4b779 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/log/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/log/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/log/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.metric.log (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/noop/NoopMetricExporterSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/noop/NoopMetricExporterSpi.html
index c0950f9..9110585 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/noop/NoopMetricExporterSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/noop/NoopMetricExporterSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/noop/NoopMetricExporterSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NoopMetricExporterSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/noop/class-use/NoopMetricExporterSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/noop/class-use/NoopMetricExporterSpi.html
index 79800f0..8d7dbac 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/noop/class-use/NoopMetricExporterSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/noop/class-use/NoopMetricExporterSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/noop/class-use/NoopMetricExporterSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.metric.noop.NoopMetricExporterSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/noop/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/noop/package-frame.html
index 7c64296..ec16daa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/noop/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/noop/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/noop/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.metric.noop (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/noop/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/noop/package-summary.html
index db7ab48..232128b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/noop/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/noop/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/noop/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.metric.noop (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/noop/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/noop/package-tree.html
index 7a0f977..b033972 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/noop/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/noop/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/noop/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.metric.noop Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/noop/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/noop/package-use.html
index 9d86f80..2a27856 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/noop/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/noop/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/noop/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.metric.noop (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/opencensus/OpenCensusMetricExporterSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/opencensus/OpenCensusMetricExporterSpi.html
index ce09be2..6083c26 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/opencensus/OpenCensusMetricExporterSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/opencensus/OpenCensusMetricExporterSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/opencensus/OpenCensusMetricExporterSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>OpenCensusMetricExporterSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/opencensus/class-use/OpenCensusMetricExporterSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/opencensus/class-use/OpenCensusMetricExporterSpi.html
index 32e8bf5..da00c92 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/opencensus/class-use/OpenCensusMetricExporterSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/opencensus/class-use/OpenCensusMetricExporterSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/opencensus/class-use/OpenCensusMetricExporterSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.metric.opencensus.OpenCensusMetricExporterSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/opencensus/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/opencensus/package-frame.html
index c0d6f32..9a8d3a3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/opencensus/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/opencensus/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/opencensus/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.metric.opencensus (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/opencensus/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/opencensus/package-summary.html
index f043434..e317368 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/opencensus/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/opencensus/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/opencensus/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.metric.opencensus (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/opencensus/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/opencensus/package-tree.html
index 5daab6f..25bf53f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/opencensus/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/opencensus/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/opencensus/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.metric.opencensus Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/opencensus/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/opencensus/package-use.html
index 78fc116..05bfbb6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/opencensus/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/opencensus/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/opencensus/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.metric.opencensus (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/package-frame.html
index b6aad39..4242082 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.metric (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/package-summary.html
index 8731535..476999c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.metric (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/package-tree.html
index 6b3f33c..0174c21 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.metric Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/package-use.html
index c4e7069..e487a0d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.metric (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/sql/MetricRegistryLocalSystemView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/sql/MetricRegistryLocalSystemView.html
index 5c75bc5..cb6bad7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/sql/MetricRegistryLocalSystemView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/sql/MetricRegistryLocalSystemView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/sql/MetricRegistryLocalSystemView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MetricRegistryLocalSystemView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/sql/SqlViewMetricExporterSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/sql/SqlViewMetricExporterSpi.html
index 8dbf401..88fb69c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/sql/SqlViewMetricExporterSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/sql/SqlViewMetricExporterSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/sql/SqlViewMetricExporterSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SqlViewMetricExporterSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/sql/class-use/MetricRegistryLocalSystemView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/sql/class-use/MetricRegistryLocalSystemView.html
index ebc1262..eb75002 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/sql/class-use/MetricRegistryLocalSystemView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/sql/class-use/MetricRegistryLocalSystemView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/sql/class-use/MetricRegistryLocalSystemView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.metric.sql.MetricRegistryLocalSystemView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/sql/class-use/SqlViewMetricExporterSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/sql/class-use/SqlViewMetricExporterSpi.html
index 1e9c7d0..dbd8a94 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/sql/class-use/SqlViewMetricExporterSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/sql/class-use/SqlViewMetricExporterSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/sql/class-use/SqlViewMetricExporterSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.metric.sql.SqlViewMetricExporterSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/sql/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/sql/package-frame.html
index b024e67..e0502bf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/sql/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/sql/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/sql/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.metric.sql (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/sql/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/sql/package-summary.html
index d4b8022..872a22b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/sql/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/sql/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/sql/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.metric.sql (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/sql/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/sql/package-tree.html
index bcf6638..e4320aa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/sql/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/sql/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/sql/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.metric.sql Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/sql/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/sql/package-use.html
index 3517233..27ac88c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/sql/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/metric/sql/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/metric/sql/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.metric.sql (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/package-frame.html
index 6a23005..9155a7f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/package-summary.html
index 6cf9763..97dfc1a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/package-tree.html
index 35fa5d9..1d3274c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/package-use.html
index 5bf8390..b34f2f9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/FiltrableSystemViewLocal.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/FiltrableSystemViewLocal.html
index b51f7d0..9a9cadf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/FiltrableSystemViewLocal.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/FiltrableSystemViewLocal.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/FiltrableSystemViewLocal.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>FiltrableSystemViewLocal (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/ReadOnlySystemViewRegistry.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/ReadOnlySystemViewRegistry.html
index 2db3cd4..7ca2c36 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/ReadOnlySystemViewRegistry.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/ReadOnlySystemViewRegistry.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/ReadOnlySystemViewRegistry.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ReadOnlySystemViewRegistry (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/SqlViewExporterSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/SqlViewExporterSpi.html
index 457f9a7..74cfede 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/SqlViewExporterSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/SqlViewExporterSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/SqlViewExporterSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SqlViewExporterSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/SystemViewExporterSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/SystemViewExporterSpi.html
index 6961d66..e6c37ca 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/SystemViewExporterSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/SystemViewExporterSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/SystemViewExporterSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SystemViewExporterSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/SystemViewLocal.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/SystemViewLocal.html
index dfe0dab..e28bfc3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/SystemViewLocal.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/SystemViewLocal.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/SystemViewLocal.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SystemViewLocal (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/class-use/FiltrableSystemViewLocal.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/class-use/FiltrableSystemViewLocal.html
index 80e8bc2..eb76a4a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/class-use/FiltrableSystemViewLocal.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/class-use/FiltrableSystemViewLocal.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/class-use/FiltrableSystemViewLocal.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.systemview.FiltrableSystemViewLocal (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/class-use/ReadOnlySystemViewRegistry.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/class-use/ReadOnlySystemViewRegistry.html
index a54971c..d809427 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/class-use/ReadOnlySystemViewRegistry.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/class-use/ReadOnlySystemViewRegistry.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/class-use/ReadOnlySystemViewRegistry.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.systemview.ReadOnlySystemViewRegistry (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/class-use/SqlViewExporterSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/class-use/SqlViewExporterSpi.html
index 1807ebf..0c43d5f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/class-use/SqlViewExporterSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/class-use/SqlViewExporterSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/class-use/SqlViewExporterSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.systemview.SqlViewExporterSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/class-use/SystemViewExporterSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/class-use/SystemViewExporterSpi.html
index 4c2851f..df2eab3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/class-use/SystemViewExporterSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/class-use/SystemViewExporterSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/class-use/SystemViewExporterSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.systemview.SystemViewExporterSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/class-use/SystemViewLocal.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/class-use/SystemViewLocal.html
index 69bf463..1e432f9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/class-use/SystemViewLocal.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/class-use/SystemViewLocal.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/class-use/SystemViewLocal.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.systemview.SystemViewLocal (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/jmx/JmxSystemViewExporterSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/jmx/JmxSystemViewExporterSpi.html
index d58b598..0e995fd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/jmx/JmxSystemViewExporterSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/jmx/JmxSystemViewExporterSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/jmx/JmxSystemViewExporterSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>JmxSystemViewExporterSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/jmx/SystemViewMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/jmx/SystemViewMBean.html
index dc3b5fc..3551ff1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/jmx/SystemViewMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/jmx/SystemViewMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/jmx/SystemViewMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SystemViewMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/jmx/class-use/JmxSystemViewExporterSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/jmx/class-use/JmxSystemViewExporterSpi.html
index 7a081c1..18ac54e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/jmx/class-use/JmxSystemViewExporterSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/jmx/class-use/JmxSystemViewExporterSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/jmx/class-use/JmxSystemViewExporterSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.systemview.jmx.JmxSystemViewExporterSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/jmx/class-use/SystemViewMBean.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/jmx/class-use/SystemViewMBean.html
index b79cc82..a56a0f4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/jmx/class-use/SystemViewMBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/jmx/class-use/SystemViewMBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/jmx/class-use/SystemViewMBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.systemview.jmx.SystemViewMBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/jmx/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/jmx/package-frame.html
index 4ab49d8..b451787 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/jmx/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/jmx/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/jmx/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.systemview.jmx (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/jmx/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/jmx/package-summary.html
index 2dbd19e..2e3d5ce 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/jmx/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/jmx/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/jmx/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.systemview.jmx (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/jmx/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/jmx/package-tree.html
index 526d75e..db21475 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/jmx/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/jmx/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/jmx/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.systemview.jmx Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/jmx/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/jmx/package-use.html
index 7cb1171..d4952d7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/jmx/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/jmx/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/jmx/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.systemview.jmx (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/package-frame.html
index d3618ce..0076489 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.systemview (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/package-summary.html
index e0b7714..010119c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.systemview (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/package-tree.html
index 66444bb..16e9c61 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.systemview Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/package-use.html
index a6faceb..57bcc05 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.systemview (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/BinaryMetadataView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/BinaryMetadataView.html
index 1f6ad9c..eb09e39 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/BinaryMetadataView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/BinaryMetadataView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/BinaryMetadataView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BinaryMetadataView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/CacheGroupView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/CacheGroupView.html
index 73a99ed..d5de0c3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/CacheGroupView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/CacheGroupView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/CacheGroupView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheGroupView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/CachePagesListView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/CachePagesListView.html
index aa5412d..e71f8fd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/CachePagesListView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/CachePagesListView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/CachePagesListView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CachePagesListView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/CacheView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/CacheView.html
index 460a641..0b32257 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/CacheView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/CacheView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/CacheView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/ClientConnectionView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/ClientConnectionView.html
index fb72e74..7ecf8b1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/ClientConnectionView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/ClientConnectionView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/ClientConnectionView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClientConnectionView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/ClusterNodeView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/ClusterNodeView.html
index d4eb9b6..e6c3f37 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/ClusterNodeView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/ClusterNodeView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/ClusterNodeView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClusterNodeView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/ComputeJobView.ComputeJobState.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/ComputeJobView.ComputeJobState.html
index 6a5d827..2a39bc5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/ComputeJobView.ComputeJobState.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/ComputeJobView.ComputeJobState.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/ComputeJobView.ComputeJobState.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ComputeJobView.ComputeJobState (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/ComputeJobView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/ComputeJobView.html
index ecfc7c1..24fdc33 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/ComputeJobView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/ComputeJobView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/ComputeJobView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ComputeJobView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/ComputeTaskView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/ComputeTaskView.html
index 198657c..caf88a5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/ComputeTaskView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/ComputeTaskView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/ComputeTaskView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ComputeTaskView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/ContinuousQueryView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/ContinuousQueryView.html
index 311e3d1..46b3e49 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/ContinuousQueryView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/ContinuousQueryView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/ContinuousQueryView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ContinuousQueryView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/FiltrableSystemView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/FiltrableSystemView.html
index 4a6fd1e..81da77c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/FiltrableSystemView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/FiltrableSystemView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/FiltrableSystemView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>FiltrableSystemView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/MetastorageView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/MetastorageView.html
index b3474aa..52059e8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/MetastorageView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/MetastorageView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/MetastorageView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MetastorageView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/PagesListView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/PagesListView.html
index 8bd2a25..3b6bef8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/PagesListView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/PagesListView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/PagesListView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PagesListView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/PartitionStateView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/PartitionStateView.html
index 768212a..f199721 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/PartitionStateView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/PartitionStateView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/PartitionStateView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PartitionStateView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/ScanQueryView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/ScanQueryView.html
index 361f876..e3e1b3c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/ScanQueryView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/ScanQueryView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/ScanQueryView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ScanQueryView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/ServiceView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/ServiceView.html
index 86e958b..7d5b7f6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/ServiceView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/ServiceView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/ServiceView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ServiceView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SqlIndexView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SqlIndexView.html
index f81ee16..1a5186d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SqlIndexView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SqlIndexView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/SqlIndexView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SqlIndexView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SqlQueryHistoryView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SqlQueryHistoryView.html
index 58334ea..db9836e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SqlQueryHistoryView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SqlQueryHistoryView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/SqlQueryHistoryView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SqlQueryHistoryView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SqlQueryView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SqlQueryView.html
index c076f64..8f80814 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SqlQueryView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SqlQueryView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/SqlQueryView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SqlQueryView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SqlSchemaView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SqlSchemaView.html
index 2cad2fb..9670b22 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SqlSchemaView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SqlSchemaView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/SqlSchemaView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SqlSchemaView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SqlTableColumnView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SqlTableColumnView.html
index bd78951..4ec315f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SqlTableColumnView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SqlTableColumnView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/SqlTableColumnView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SqlTableColumnView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SqlTableView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SqlTableView.html
index ce159ca..0b780d4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SqlTableView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SqlTableView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/SqlTableView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SqlTableView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SqlViewColumnView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SqlViewColumnView.html
index fe731d2..5cb811b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SqlViewColumnView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SqlViewColumnView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/SqlViewColumnView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SqlViewColumnView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SqlViewView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SqlViewView.html
index 8d81512..b313ecd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SqlViewView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SqlViewView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/SqlViewView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SqlViewView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/StripedExecutorTaskView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/StripedExecutorTaskView.html
index a419593..f35a1cc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/StripedExecutorTaskView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/StripedExecutorTaskView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/StripedExecutorTaskView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>StripedExecutorTaskView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SystemView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SystemView.html
index b217307..db6c168 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SystemView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SystemView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/SystemView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SystemView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SystemViewRowAttributeWalker.AttributeVisitor.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SystemViewRowAttributeWalker.AttributeVisitor.html
index bdea9ef..cb6c763 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SystemViewRowAttributeWalker.AttributeVisitor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SystemViewRowAttributeWalker.AttributeVisitor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/SystemViewRowAttributeWalker.AttributeVisitor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SystemViewRowAttributeWalker.AttributeVisitor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SystemViewRowAttributeWalker.AttributeWithValueVisitor.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SystemViewRowAttributeWalker.AttributeWithValueVisitor.html
index b5e270c..8c5f15b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SystemViewRowAttributeWalker.AttributeWithValueVisitor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SystemViewRowAttributeWalker.AttributeWithValueVisitor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/SystemViewRowAttributeWalker.AttributeWithValueVisitor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SystemViewRowAttributeWalker.AttributeWithValueVisitor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SystemViewRowAttributeWalker.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SystemViewRowAttributeWalker.html
index a7b3074..ae55a3a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SystemViewRowAttributeWalker.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/SystemViewRowAttributeWalker.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/SystemViewRowAttributeWalker.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SystemViewRowAttributeWalker (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/TransactionView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/TransactionView.html
index 3257d3b..45f56c8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/TransactionView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/TransactionView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/TransactionView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:08 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TransactionView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/BinaryMetadataView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/BinaryMetadataView.html
index 40dbcf6..eefde87 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/BinaryMetadataView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/BinaryMetadataView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/class-use/BinaryMetadataView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.systemview.view.BinaryMetadataView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/CacheGroupView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/CacheGroupView.html
index 9540cfa..6fe40ed 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/CacheGroupView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/CacheGroupView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/class-use/CacheGroupView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.systemview.view.CacheGroupView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/CachePagesListView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/CachePagesListView.html
index b0086ca..47b4da6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/CachePagesListView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/CachePagesListView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/class-use/CachePagesListView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.systemview.view.CachePagesListView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/CacheView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/CacheView.html
index 18c2c0a..0396f7a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/CacheView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/CacheView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/class-use/CacheView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.systemview.view.CacheView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/ClientConnectionView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/ClientConnectionView.html
index dd82536..ee605b0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/ClientConnectionView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/ClientConnectionView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/class-use/ClientConnectionView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.systemview.view.ClientConnectionView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/ClusterNodeView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/ClusterNodeView.html
index 5c17753..459e921 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/ClusterNodeView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/ClusterNodeView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/class-use/ClusterNodeView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.systemview.view.ClusterNodeView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/ComputeJobView.ComputeJobState.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/ComputeJobView.ComputeJobState.html
index be4c4bb..65ed93c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/ComputeJobView.ComputeJobState.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/ComputeJobView.ComputeJobState.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/class-use/ComputeJobView.ComputeJobState.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.systemview.view.ComputeJobView.ComputeJobState (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/ComputeJobView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/ComputeJobView.html
index 71ecaae..1f72758 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/ComputeJobView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/ComputeJobView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/class-use/ComputeJobView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.systemview.view.ComputeJobView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/ComputeTaskView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/ComputeTaskView.html
index 73a2d9a..58fb192 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/ComputeTaskView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/ComputeTaskView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/class-use/ComputeTaskView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.systemview.view.ComputeTaskView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/ContinuousQueryView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/ContinuousQueryView.html
index 394092a..14c5c06 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/ContinuousQueryView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/ContinuousQueryView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/class-use/ContinuousQueryView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.systemview.view.ContinuousQueryView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/FiltrableSystemView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/FiltrableSystemView.html
index 4d2c4eb..e9be4f8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/FiltrableSystemView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/FiltrableSystemView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/class-use/FiltrableSystemView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.systemview.view.FiltrableSystemView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/MetastorageView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/MetastorageView.html
index 9a22f4a..f2b41c7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/MetastorageView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/MetastorageView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/class-use/MetastorageView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.systemview.view.MetastorageView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/PagesListView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/PagesListView.html
index b00f056..37c3b30 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/PagesListView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/PagesListView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/class-use/PagesListView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.systemview.view.PagesListView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/PartitionStateView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/PartitionStateView.html
index 4e6d410..631f6df 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/PartitionStateView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/PartitionStateView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/class-use/PartitionStateView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.systemview.view.PartitionStateView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/ScanQueryView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/ScanQueryView.html
index fe397b5..549aceb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/ScanQueryView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/ScanQueryView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/class-use/ScanQueryView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.systemview.view.ScanQueryView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/ServiceView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/ServiceView.html
index 9bef49d..f4626f9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/ServiceView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/ServiceView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/class-use/ServiceView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.systemview.view.ServiceView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlIndexView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlIndexView.html
index 6c91fd8..f018906 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlIndexView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlIndexView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlIndexView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.systemview.view.SqlIndexView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlQueryHistoryView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlQueryHistoryView.html
index 4bcfe89..8875859 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlQueryHistoryView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlQueryHistoryView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlQueryHistoryView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.systemview.view.SqlQueryHistoryView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlQueryView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlQueryView.html
index 8136d3e..e2af37e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlQueryView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlQueryView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlQueryView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.systemview.view.SqlQueryView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlSchemaView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlSchemaView.html
index 5d40937..f2dc52c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlSchemaView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlSchemaView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlSchemaView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.systemview.view.SqlSchemaView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlTableColumnView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlTableColumnView.html
index 5a17e9c..1122934 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlTableColumnView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlTableColumnView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlTableColumnView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.systemview.view.SqlTableColumnView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlTableView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlTableView.html
index 93d6901..d065726 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlTableView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlTableView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlTableView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.systemview.view.SqlTableView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlViewColumnView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlViewColumnView.html
index 0018a62..32b897f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlViewColumnView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlViewColumnView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlViewColumnView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.systemview.view.SqlViewColumnView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlViewView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlViewView.html
index 5676fef..a9be9b8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlViewView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlViewView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/class-use/SqlViewView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.systemview.view.SqlViewView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/StripedExecutorTaskView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/StripedExecutorTaskView.html
index 6501920..add7ad7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/StripedExecutorTaskView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/StripedExecutorTaskView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/class-use/StripedExecutorTaskView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.systemview.view.StripedExecutorTaskView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SystemView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SystemView.html
index fac9733..47036f1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SystemView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SystemView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/class-use/SystemView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.systemview.view.SystemView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SystemViewRowAttributeWalker.AttributeVisitor.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SystemViewRowAttributeWalker.AttributeVisitor.html
index f1c0735..283ba0d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SystemViewRowAttributeWalker.AttributeVisitor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SystemViewRowAttributeWalker.AttributeVisitor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/class-use/SystemViewRowAttributeWalker.AttributeVisitor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.systemview.view.SystemViewRowAttributeWalker.AttributeVisitor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SystemViewRowAttributeWalker.AttributeWithValueVisitor.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SystemViewRowAttributeWalker.AttributeWithValueVisitor.html
index d0cdb27..6313b8c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SystemViewRowAttributeWalker.AttributeWithValueVisitor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SystemViewRowAttributeWalker.AttributeWithValueVisitor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/class-use/SystemViewRowAttributeWalker.AttributeWithValueVisitor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.systemview.view.SystemViewRowAttributeWalker.AttributeWithValueVisitor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SystemViewRowAttributeWalker.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SystemViewRowAttributeWalker.html
index 0a2e486..3db9e60 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SystemViewRowAttributeWalker.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/SystemViewRowAttributeWalker.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/class-use/SystemViewRowAttributeWalker.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.systemview.view.SystemViewRowAttributeWalker (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/TransactionView.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/TransactionView.html
index 97d227d..e3e4d2a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/TransactionView.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/class-use/TransactionView.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/class-use/TransactionView.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.systemview.view.TransactionView (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/package-frame.html
index 8435e25..5308868 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.systemview.view (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/package-summary.html
index fb198e3..f92412c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.systemview.view (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/package-tree.html
index bc47c44..5baa73a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.systemview.view Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/package-use.html
index 26c72e7..be1460c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/systemview/view/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/systemview/view/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.systemview.view (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/NoopSpiSpecificSpan.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/NoopSpiSpecificSpan.html
index 419f70f..e516799 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/NoopSpiSpecificSpan.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/NoopSpiSpecificSpan.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/NoopSpiSpecificSpan.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NoopSpiSpecificSpan (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/NoopTracingSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/NoopTracingSpi.html
index 6823ee5..1e31e98 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/NoopTracingSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/NoopTracingSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/NoopTracingSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>NoopTracingSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/Scope.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/Scope.html
index 2d6ad8a..3cfe9f9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/Scope.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/Scope.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/Scope.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Scope (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/SpanStatus.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/SpanStatus.html
index 41f8da0..3326216 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/SpanStatus.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/SpanStatus.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/SpanStatus.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SpanStatus (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/SpiSpecificSpan.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/SpiSpecificSpan.html
index 7a8ded6..cae35d1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/SpiSpecificSpan.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/SpiSpecificSpan.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/SpiSpecificSpan.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SpiSpecificSpan (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/TracingConfigurationCoordinates.Builder.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/TracingConfigurationCoordinates.Builder.html
index 99e1b31..cdf2f9f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/TracingConfigurationCoordinates.Builder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/TracingConfigurationCoordinates.Builder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/TracingConfigurationCoordinates.Builder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TracingConfigurationCoordinates.Builder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/TracingConfigurationCoordinates.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/TracingConfigurationCoordinates.html
index f4d4c5a..0d6cae4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/TracingConfigurationCoordinates.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/TracingConfigurationCoordinates.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/TracingConfigurationCoordinates.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TracingConfigurationCoordinates (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/TracingConfigurationManager.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/TracingConfigurationManager.html
index aadab49..fe483cf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/TracingConfigurationManager.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/TracingConfigurationManager.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/TracingConfigurationManager.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TracingConfigurationManager (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/TracingConfigurationParameters.Builder.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/TracingConfigurationParameters.Builder.html
index c73cf96..a45001a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/TracingConfigurationParameters.Builder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/TracingConfigurationParameters.Builder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/TracingConfigurationParameters.Builder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TracingConfigurationParameters.Builder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/TracingConfigurationParameters.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/TracingConfigurationParameters.html
index 2127249..0ac963c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/TracingConfigurationParameters.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/TracingConfigurationParameters.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/TracingConfigurationParameters.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TracingConfigurationParameters (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/TracingSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/TracingSpi.html
index 4d27e53..d65106e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/TracingSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/TracingSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/TracingSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TracingSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/NoopSpiSpecificSpan.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/NoopSpiSpecificSpan.html
index d57e2eb..9d80314 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/NoopSpiSpecificSpan.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/NoopSpiSpecificSpan.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/class-use/NoopSpiSpecificSpan.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.tracing.NoopSpiSpecificSpan (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/NoopTracingSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/NoopTracingSpi.html
index 1455d75..8a8e36b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/NoopTracingSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/NoopTracingSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/class-use/NoopTracingSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.tracing.NoopTracingSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/Scope.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/Scope.html
index 0b59cce..61f40fb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/Scope.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/Scope.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/class-use/Scope.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.tracing.Scope (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/SpanStatus.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/SpanStatus.html
index ee3ef60..e8a4bd9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/SpanStatus.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/SpanStatus.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/class-use/SpanStatus.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.tracing.SpanStatus (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/SpiSpecificSpan.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/SpiSpecificSpan.html
index 000109d..f3b0664 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/SpiSpecificSpan.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/SpiSpecificSpan.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/class-use/SpiSpecificSpan.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.tracing.SpiSpecificSpan (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/TracingConfigurationCoordinates.Builder.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/TracingConfigurationCoordinates.Builder.html
index cf9db6d..3c6f8ac 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/TracingConfigurationCoordinates.Builder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/TracingConfigurationCoordinates.Builder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/class-use/TracingConfigurationCoordinates.Builder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.tracing.TracingConfigurationCoordinates.Builder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/TracingConfigurationCoordinates.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/TracingConfigurationCoordinates.html
index 8bb42bc..477d467 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/TracingConfigurationCoordinates.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/TracingConfigurationCoordinates.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/class-use/TracingConfigurationCoordinates.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.tracing.TracingConfigurationCoordinates (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/TracingConfigurationManager.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/TracingConfigurationManager.html
index fb5ea41..f1b78fd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/TracingConfigurationManager.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/TracingConfigurationManager.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/class-use/TracingConfigurationManager.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.tracing.TracingConfigurationManager (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/TracingConfigurationParameters.Builder.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/TracingConfigurationParameters.Builder.html
index f58d1a2..3122459 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/TracingConfigurationParameters.Builder.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/TracingConfigurationParameters.Builder.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/class-use/TracingConfigurationParameters.Builder.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.tracing.TracingConfigurationParameters.Builder (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/TracingConfigurationParameters.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/TracingConfigurationParameters.html
index ea47c48..ec28038 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/TracingConfigurationParameters.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/TracingConfigurationParameters.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/class-use/TracingConfigurationParameters.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.tracing.TracingConfigurationParameters (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/TracingSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/TracingSpi.html
index 43dd01c..f6d8f4f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/TracingSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/class-use/TracingSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/class-use/TracingSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.spi.tracing.TracingSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/OpenCensusSpanAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/OpenCensusSpanAdapter.html
index 3a7e987..111fe80 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/OpenCensusSpanAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/OpenCensusSpanAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/opencensus/OpenCensusSpanAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>OpenCensusSpanAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/OpenCensusTraceExporter.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/OpenCensusTraceExporter.html
index 61b19e4..81a8d32 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/OpenCensusTraceExporter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/OpenCensusTraceExporter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/opencensus/OpenCensusTraceExporter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>OpenCensusTraceExporter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/OpenCensusTracingSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/OpenCensusTracingSpi.html
index 65b8c30..595ffd8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/OpenCensusTracingSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/OpenCensusTracingSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/opencensus/OpenCensusTracingSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>OpenCensusTracingSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/StatusMatchTable.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/StatusMatchTable.html
index d0b1c62..b0569c7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/StatusMatchTable.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/StatusMatchTable.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/opencensus/StatusMatchTable.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>StatusMatchTable (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/class-use/OpenCensusSpanAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/class-use/OpenCensusSpanAdapter.html
index e45e7c6..7541df9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/class-use/OpenCensusSpanAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/class-use/OpenCensusSpanAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/opencensus/class-use/OpenCensusSpanAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.tracing.opencensus.OpenCensusSpanAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/class-use/OpenCensusTraceExporter.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/class-use/OpenCensusTraceExporter.html
index cbe3fef..8ca2599 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/class-use/OpenCensusTraceExporter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/class-use/OpenCensusTraceExporter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/opencensus/class-use/OpenCensusTraceExporter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.tracing.opencensus.OpenCensusTraceExporter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/class-use/OpenCensusTracingSpi.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/class-use/OpenCensusTracingSpi.html
index 0cdd9c9..58b5124 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/class-use/OpenCensusTracingSpi.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/class-use/OpenCensusTracingSpi.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/opencensus/class-use/OpenCensusTracingSpi.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.tracing.opencensus.OpenCensusTracingSpi (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/class-use/StatusMatchTable.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/class-use/StatusMatchTable.html
index 751d207..d27fa1b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/class-use/StatusMatchTable.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/class-use/StatusMatchTable.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/opencensus/class-use/StatusMatchTable.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.spi.tracing.opencensus.StatusMatchTable (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/package-frame.html
index 757d1a1..b4e9a3f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/opencensus/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.tracing.opencensus (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/package-summary.html
index 7214caa..a6e4f1d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/opencensus/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.tracing.opencensus (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/package-tree.html
index 0a01cc0..2a8fcdc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/opencensus/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.tracing.opencensus Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/package-use.html
index 8bbaf1e..1e0d9c9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/opencensus/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/opencensus/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.tracing.opencensus (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/package-frame.html
index 18e5b0a..09ade7c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.tracing (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/package-summary.html
index 9a2399e..0017147 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.tracing (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/package-tree.html
index 8d0af18..6112f78 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.spi.tracing Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/package-use.html
index 8e71c09..23b157c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/spi/tracing/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/tracing/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.spi.tracing (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/IgniteRepository.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/IgniteRepository.html
index 7809a34..0d31ab9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/IgniteRepository.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/IgniteRepository.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/IgniteRepository.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteRepository (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/class-use/IgniteRepository.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/class-use/IgniteRepository.html
index eca14a3..403549e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/class-use/IgniteRepository.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/class-use/IgniteRepository.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/class-use/IgniteRepository.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.springdata.repository.IgniteRepository (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/EnableIgniteRepositories.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/EnableIgniteRepositories.html
index d21ba77..7b328b7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/EnableIgniteRepositories.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/EnableIgniteRepositories.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/config/EnableIgniteRepositories.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>EnableIgniteRepositories (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/IgniteRepositoriesRegistar.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/IgniteRepositoriesRegistar.html
index 65b9da7..98e6874 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/IgniteRepositoriesRegistar.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/IgniteRepositoriesRegistar.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/config/IgniteRepositoriesRegistar.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteRepositoriesRegistar (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/IgniteRepositoryConfigurationExtension.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/IgniteRepositoryConfigurationExtension.html
index de38074..7287126 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/IgniteRepositoryConfigurationExtension.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/IgniteRepositoryConfigurationExtension.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/config/IgniteRepositoryConfigurationExtension.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteRepositoryConfigurationExtension (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/Query.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/Query.html
index bec93bc..f168b60 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/Query.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/Query.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/config/Query.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Query (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/RepositoryConfig.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/RepositoryConfig.html
index f055883..15003d5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/RepositoryConfig.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/RepositoryConfig.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/config/RepositoryConfig.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>RepositoryConfig (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/class-use/EnableIgniteRepositories.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/class-use/EnableIgniteRepositories.html
index 67201dd..5f8e0a0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/class-use/EnableIgniteRepositories.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/class-use/EnableIgniteRepositories.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/config/class-use/EnableIgniteRepositories.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata.repository.config.EnableIgniteRepositories (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/class-use/IgniteRepositoriesRegistar.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/class-use/IgniteRepositoriesRegistar.html
index cc506b8..9d88b30 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/class-use/IgniteRepositoriesRegistar.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/class-use/IgniteRepositoriesRegistar.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/config/class-use/IgniteRepositoriesRegistar.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata.repository.config.IgniteRepositoriesRegistar (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/class-use/IgniteRepositoryConfigurationExtension.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/class-use/IgniteRepositoryConfigurationExtension.html
index 1796389..b0e415b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/class-use/IgniteRepositoryConfigurationExtension.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/class-use/IgniteRepositoryConfigurationExtension.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/config/class-use/IgniteRepositoryConfigurationExtension.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata.repository.config.IgniteRepositoryConfigurationExtension (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/class-use/Query.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/class-use/Query.html
index 4ded8a8..86025c6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/class-use/Query.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/class-use/Query.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/config/class-use/Query.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata.repository.config.Query (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/class-use/RepositoryConfig.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/class-use/RepositoryConfig.html
index 79c341b..441e8dc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/class-use/RepositoryConfig.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/class-use/RepositoryConfig.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/config/class-use/RepositoryConfig.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata.repository.config.RepositoryConfig (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/package-frame.html
index ae3d90d..0e8e221 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/config/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata.repository.config (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/package-summary.html
index 0938c3c..f0f3f51 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/config/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata.repository.config (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/package-tree.html
index 335f74c..54f031d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/config/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata.repository.config Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/package-use.html
index 9f522e7..84f0ef0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/config/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/config/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.springdata.repository.config (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/package-frame.html
index 7a19a4f..106f620 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata.repository (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/package-summary.html
index d416c2f..382bace 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata.repository (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/package-tree.html
index 712fc06..8ab3679 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata.repository Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/package-use.html
index 6c1fae1..a879a19 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.springdata.repository (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/IgniteQuery.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/IgniteQuery.html
index b730513..4d76c6e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/IgniteQuery.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/IgniteQuery.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/query/IgniteQuery.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteQuery (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/IgniteQueryGenerator.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/IgniteQueryGenerator.html
index 6be76ef..4965c8b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/IgniteQueryGenerator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/IgniteQueryGenerator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/query/IgniteQueryGenerator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteQueryGenerator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/IgniteRepositoryQuery.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/IgniteRepositoryQuery.html
index f400720..87fa2d8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/IgniteRepositoryQuery.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/IgniteRepositoryQuery.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/query/IgniteRepositoryQuery.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteRepositoryQuery (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/class-use/IgniteQuery.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/class-use/IgniteQuery.html
index 11b49cb..df987fd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/class-use/IgniteQuery.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/class-use/IgniteQuery.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/query/class-use/IgniteQuery.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata.repository.query.IgniteQuery (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/class-use/IgniteQueryGenerator.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/class-use/IgniteQueryGenerator.html
index 8e26ac3..c7714a4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/class-use/IgniteQueryGenerator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/class-use/IgniteQueryGenerator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/query/class-use/IgniteQueryGenerator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata.repository.query.IgniteQueryGenerator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/class-use/IgniteRepositoryQuery.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/class-use/IgniteRepositoryQuery.html
index 2712c3f..d285e66 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/class-use/IgniteRepositoryQuery.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/class-use/IgniteRepositoryQuery.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/query/class-use/IgniteRepositoryQuery.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata.repository.query.IgniteRepositoryQuery (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/package-frame.html
index 5c7cff8..57dcb2b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/query/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata.repository.query (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/package-summary.html
index 79e46dd..aefc2d8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/query/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata.repository.query (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/package-tree.html
index 9f976bf..d079264 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/query/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata.repository.query Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/package-use.html
index 2e3d8a4..0e71ab2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/query/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/query/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.springdata.repository.query (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/IgniteRepositoryFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/IgniteRepositoryFactory.html
index b856665..40a5389 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/IgniteRepositoryFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/IgniteRepositoryFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/support/IgniteRepositoryFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteRepositoryFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/IgniteRepositoryFactoryBean.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/IgniteRepositoryFactoryBean.html
index 6957706..f4ca66f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/IgniteRepositoryFactoryBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/IgniteRepositoryFactoryBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/support/IgniteRepositoryFactoryBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteRepositoryFactoryBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/IgniteRepositoryImpl.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/IgniteRepositoryImpl.html
index dc70b53..0cc8ada 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/IgniteRepositoryImpl.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/IgniteRepositoryImpl.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/support/IgniteRepositoryImpl.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteRepositoryImpl (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/class-use/IgniteRepositoryFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/class-use/IgniteRepositoryFactory.html
index 2ec058f..5d2c35f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/class-use/IgniteRepositoryFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/class-use/IgniteRepositoryFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/support/class-use/IgniteRepositoryFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata.repository.support.IgniteRepositoryFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/class-use/IgniteRepositoryFactoryBean.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/class-use/IgniteRepositoryFactoryBean.html
index cc88b97..b1d2e87 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/class-use/IgniteRepositoryFactoryBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/class-use/IgniteRepositoryFactoryBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/support/class-use/IgniteRepositoryFactoryBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata.repository.support.IgniteRepositoryFactoryBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/class-use/IgniteRepositoryImpl.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/class-use/IgniteRepositoryImpl.html
index ec7c49d..10bed9b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/class-use/IgniteRepositoryImpl.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/class-use/IgniteRepositoryImpl.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/support/class-use/IgniteRepositoryImpl.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata.repository.support.IgniteRepositoryImpl (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/package-frame.html
index 5d9ee12..613f375 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/support/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata.repository.support (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/package-summary.html
index 077b258..7909ba2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/support/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata.repository.support (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/package-tree.html
index dfbd51d..6f94e08 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/support/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata.repository.support Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/package-use.html
index e1a1ac0..ec98f33 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata/repository/support/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata/repository/support/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.springdata.repository.support (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/IgniteRepository.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/IgniteRepository.html
index 4c94927..f304e4d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/IgniteRepository.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/IgniteRepository.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/IgniteRepository.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteRepository (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/class-use/IgniteRepository.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/class-use/IgniteRepository.html
index 523ae98..f988c2c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/class-use/IgniteRepository.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/class-use/IgniteRepository.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/class-use/IgniteRepository.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.springdata20.repository.IgniteRepository (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/DynamicQueryConfig.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/DynamicQueryConfig.html
index 5a03782..88382a3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/DynamicQueryConfig.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/DynamicQueryConfig.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/config/DynamicQueryConfig.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DynamicQueryConfig (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/EnableIgniteRepositories.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/EnableIgniteRepositories.html
index abb2776..3ee88e9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/EnableIgniteRepositories.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/EnableIgniteRepositories.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/config/EnableIgniteRepositories.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>EnableIgniteRepositories (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/IgniteRepositoriesRegistar.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/IgniteRepositoriesRegistar.html
index 0eca528..588d3e0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/IgniteRepositoriesRegistar.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/IgniteRepositoriesRegistar.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/config/IgniteRepositoriesRegistar.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteRepositoriesRegistar (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/IgniteRepositoryConfigurationExtension.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/IgniteRepositoryConfigurationExtension.html
index c025dbe..3517236 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/IgniteRepositoryConfigurationExtension.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/IgniteRepositoryConfigurationExtension.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/config/IgniteRepositoryConfigurationExtension.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteRepositoryConfigurationExtension (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/Query.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/Query.html
index d4b39fc..fa764c5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/Query.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/Query.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/config/Query.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Query (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/RepositoryConfig.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/RepositoryConfig.html
index 6ddb762..418ee59 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/RepositoryConfig.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/RepositoryConfig.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/config/RepositoryConfig.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>RepositoryConfig (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/class-use/DynamicQueryConfig.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/class-use/DynamicQueryConfig.html
index ec4ea71..da5e0b3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/class-use/DynamicQueryConfig.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/class-use/DynamicQueryConfig.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/config/class-use/DynamicQueryConfig.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata20.repository.config.DynamicQueryConfig (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/class-use/EnableIgniteRepositories.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/class-use/EnableIgniteRepositories.html
index ffe4613..ab39213 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/class-use/EnableIgniteRepositories.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/class-use/EnableIgniteRepositories.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/config/class-use/EnableIgniteRepositories.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata20.repository.config.EnableIgniteRepositories (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/class-use/IgniteRepositoriesRegistar.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/class-use/IgniteRepositoriesRegistar.html
index ab306c6..14311f8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/class-use/IgniteRepositoriesRegistar.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/class-use/IgniteRepositoriesRegistar.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/config/class-use/IgniteRepositoriesRegistar.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata20.repository.config.IgniteRepositoriesRegistar (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/class-use/IgniteRepositoryConfigurationExtension.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/class-use/IgniteRepositoryConfigurationExtension.html
index 17e41f4..769304d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/class-use/IgniteRepositoryConfigurationExtension.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/class-use/IgniteRepositoryConfigurationExtension.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/config/class-use/IgniteRepositoryConfigurationExtension.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata20.repository.config.IgniteRepositoryConfigurationExtension (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/class-use/Query.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/class-use/Query.html
index 387c057..0eaa759 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/class-use/Query.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/class-use/Query.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/config/class-use/Query.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata20.repository.config.Query (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/class-use/RepositoryConfig.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/class-use/RepositoryConfig.html
index 8132902..d259d3c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/class-use/RepositoryConfig.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/class-use/RepositoryConfig.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/config/class-use/RepositoryConfig.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata20.repository.config.RepositoryConfig (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/package-frame.html
index d0643cd..2df3d2c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/config/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata20.repository.config (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/package-summary.html
index 6510ea0..7dba364 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/config/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata20.repository.config (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/package-tree.html
index 21a1c1d..ae590ec 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/config/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata20.repository.config Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/package-use.html
index 79a038d..b766725 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/config/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/config/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.springdata20.repository.config (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/package-frame.html
index 90e1c54..5f304d3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata20.repository (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/package-summary.html
index e3bb774..64eba5f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata20.repository (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/package-tree.html
index 19841f9..e19e6e2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata20.repository Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/package-use.html
index 194e5e6..c5284a8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.springdata20.repository (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/IgniteQuery.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/IgniteQuery.html
index c0eb18c..efabe2f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/IgniteQuery.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/IgniteQuery.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/query/IgniteQuery.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteQuery (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/IgniteQueryGenerator.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/IgniteQueryGenerator.html
index 5e95868..84a6f9c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/IgniteQueryGenerator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/IgniteQueryGenerator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/query/IgniteQueryGenerator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteQueryGenerator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/IgniteRepositoryQuery.QueryCursorWrapper.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/IgniteRepositoryQuery.QueryCursorWrapper.html
index 6c9c514..068aafd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/IgniteRepositoryQuery.QueryCursorWrapper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/IgniteRepositoryQuery.QueryCursorWrapper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/query/IgniteRepositoryQuery.QueryCursorWrapper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteRepositoryQuery.QueryCursorWrapper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/IgniteRepositoryQuery.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/IgniteRepositoryQuery.html
index 205a734..7ab6422 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/IgniteRepositoryQuery.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/IgniteRepositoryQuery.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/query/IgniteRepositoryQuery.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteRepositoryQuery (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/QueryUtils.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/QueryUtils.html
index 7bac6e6..372fac0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/QueryUtils.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/QueryUtils.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/query/QueryUtils.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>QueryUtils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/class-use/IgniteQuery.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/class-use/IgniteQuery.html
index 6974625..b7c7026 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/class-use/IgniteQuery.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/class-use/IgniteQuery.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/query/class-use/IgniteQuery.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata20.repository.query.IgniteQuery (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/class-use/IgniteQueryGenerator.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/class-use/IgniteQueryGenerator.html
index 74b4e2c..9b8f32a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/class-use/IgniteQueryGenerator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/class-use/IgniteQueryGenerator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/query/class-use/IgniteQueryGenerator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata20.repository.query.IgniteQueryGenerator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/class-use/IgniteRepositoryQuery.QueryCursorWrapper.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/class-use/IgniteRepositoryQuery.QueryCursorWrapper.html
index 0d83c82..d1b67f7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/class-use/IgniteRepositoryQuery.QueryCursorWrapper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/class-use/IgniteRepositoryQuery.QueryCursorWrapper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/query/class-use/IgniteRepositoryQuery.QueryCursorWrapper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata20.repository.query.IgniteRepositoryQuery.QueryCursorWrapper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/class-use/IgniteRepositoryQuery.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/class-use/IgniteRepositoryQuery.html
index aa19c6a..a25508f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/class-use/IgniteRepositoryQuery.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/class-use/IgniteRepositoryQuery.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/query/class-use/IgniteRepositoryQuery.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata20.repository.query.IgniteRepositoryQuery (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/class-use/QueryUtils.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/class-use/QueryUtils.html
index 6c1a0a8..01a8fa7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/class-use/QueryUtils.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/class-use/QueryUtils.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/query/class-use/QueryUtils.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata20.repository.query.QueryUtils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/package-frame.html
index c1bf5fe..0f5dd17 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/query/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata20.repository.query (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/package-summary.html
index 086f5bc..648ac43 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/query/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata20.repository.query (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/package-tree.html
index db7323e..feda00f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/query/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata20.repository.query Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/package-use.html
index e19b668..42c4701 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/query/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.springdata20.repository.query (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/SpelEvaluator.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/SpelEvaluator.html
index 8704bcb..60ddcbc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/SpelEvaluator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/SpelEvaluator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/query/spel/SpelEvaluator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SpelEvaluator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/SpelQueryContext.EvaluatingSpelQueryContext.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/SpelQueryContext.EvaluatingSpelQueryContext.html
index 3c6d69e..e80e1fd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/SpelQueryContext.EvaluatingSpelQueryContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/SpelQueryContext.EvaluatingSpelQueryContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/query/spel/SpelQueryContext.EvaluatingSpelQueryContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SpelQueryContext.EvaluatingSpelQueryContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/SpelQueryContext.SpelExtractor.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/SpelQueryContext.SpelExtractor.html
index 6f7fe6e..db2ae22 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/SpelQueryContext.SpelExtractor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/SpelQueryContext.SpelExtractor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/query/spel/SpelQueryContext.SpelExtractor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SpelQueryContext.SpelExtractor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/SpelQueryContext.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/SpelQueryContext.html
index 6558e2a..ab49ee8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/SpelQueryContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/SpelQueryContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/query/spel/SpelQueryContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SpelQueryContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/class-use/SpelEvaluator.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/class-use/SpelEvaluator.html
index 7234de7..8dad4d1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/class-use/SpelEvaluator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/class-use/SpelEvaluator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/query/spel/class-use/SpelEvaluator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata20.repository.query.spel.SpelEvaluator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/class-use/SpelQueryContext.EvaluatingSpelQueryContext.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/class-use/SpelQueryContext.EvaluatingSpelQueryContext.html
index 3fb5d31..6f92c03 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/class-use/SpelQueryContext.EvaluatingSpelQueryContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/class-use/SpelQueryContext.EvaluatingSpelQueryContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/query/spel/class-use/SpelQueryContext.EvaluatingSpelQueryContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata20.repository.query.spel.SpelQueryContext.EvaluatingSpelQueryContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/class-use/SpelQueryContext.SpelExtractor.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/class-use/SpelQueryContext.SpelExtractor.html
index b421a0d..84d21c1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/class-use/SpelQueryContext.SpelExtractor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/class-use/SpelQueryContext.SpelExtractor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/query/spel/class-use/SpelQueryContext.SpelExtractor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata20.repository.query.spel.SpelQueryContext.SpelExtractor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/class-use/SpelQueryContext.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/class-use/SpelQueryContext.html
index 86b8bc0..4c1edd4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/class-use/SpelQueryContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/class-use/SpelQueryContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/query/spel/class-use/SpelQueryContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata20.repository.query.spel.SpelQueryContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/package-frame.html
index b91df7b..6f32080 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/query/spel/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata20.repository.query.spel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/package-summary.html
index 5725423..ac4a3c2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/query/spel/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata20.repository.query.spel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/package-tree.html
index 4961017..b83d5d1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/query/spel/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata20.repository.query.spel Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/package-use.html
index 0e12114..9eb2de5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/query/spel/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/query/spel/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.springdata20.repository.query.spel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/ConditionFalse.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/ConditionFalse.html
index f67a048..d4983a1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/ConditionFalse.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/ConditionFalse.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/support/ConditionFalse.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ConditionFalse (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/IgniteRepositoryFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/IgniteRepositoryFactory.html
index 02f045e..f5af891 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/IgniteRepositoryFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/IgniteRepositoryFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/support/IgniteRepositoryFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteRepositoryFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/IgniteRepositoryFactoryBean.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/IgniteRepositoryFactoryBean.html
index 2997337..fcfe7ab 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/IgniteRepositoryFactoryBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/IgniteRepositoryFactoryBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/support/IgniteRepositoryFactoryBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteRepositoryFactoryBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/IgniteRepositoryImpl.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/IgniteRepositoryImpl.html
index b428b8c..36bb2ea 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/IgniteRepositoryImpl.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/IgniteRepositoryImpl.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/support/IgniteRepositoryImpl.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteRepositoryImpl (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/class-use/ConditionFalse.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/class-use/ConditionFalse.html
index 0af4b1f..2eceb00 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/class-use/ConditionFalse.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/class-use/ConditionFalse.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/support/class-use/ConditionFalse.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata20.repository.support.ConditionFalse (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/class-use/IgniteRepositoryFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/class-use/IgniteRepositoryFactory.html
index c276fbb..a3aa1dd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/class-use/IgniteRepositoryFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/class-use/IgniteRepositoryFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/support/class-use/IgniteRepositoryFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata20.repository.support.IgniteRepositoryFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/class-use/IgniteRepositoryFactoryBean.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/class-use/IgniteRepositoryFactoryBean.html
index 33a5320..36fd3a6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/class-use/IgniteRepositoryFactoryBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/class-use/IgniteRepositoryFactoryBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/support/class-use/IgniteRepositoryFactoryBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata20.repository.support.IgniteRepositoryFactoryBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/class-use/IgniteRepositoryImpl.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/class-use/IgniteRepositoryImpl.html
index 465c153..8c59e08 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/class-use/IgniteRepositoryImpl.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/class-use/IgniteRepositoryImpl.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/support/class-use/IgniteRepositoryImpl.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata20.repository.support.IgniteRepositoryImpl (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/package-frame.html
index 781b2ea..96102b0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/support/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata20.repository.support (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/package-summary.html
index 58086b7..4088ea6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/support/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata20.repository.support (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/package-tree.html
index 9c81497..bc43757 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/support/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata20.repository.support Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/package-use.html
index f8dc4b5..0cad2ed 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata20/repository/support/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata20/repository/support/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.springdata20.repository.support (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/IgniteRepository.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/IgniteRepository.html
index c6c65ee..05b26a8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/IgniteRepository.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/IgniteRepository.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/IgniteRepository.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteRepository (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/class-use/IgniteRepository.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/class-use/IgniteRepository.html
index 5f26b4d..6e89246 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/class-use/IgniteRepository.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/class-use/IgniteRepository.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/class-use/IgniteRepository.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.springdata22.repository.IgniteRepository (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/DynamicQueryConfig.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/DynamicQueryConfig.html
index d751b01..9a585c9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/DynamicQueryConfig.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/DynamicQueryConfig.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/config/DynamicQueryConfig.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DynamicQueryConfig (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/EnableIgniteRepositories.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/EnableIgniteRepositories.html
index d50136c..e1cdac3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/EnableIgniteRepositories.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/EnableIgniteRepositories.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/config/EnableIgniteRepositories.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>EnableIgniteRepositories (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/IgniteRepositoriesRegistar.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/IgniteRepositoriesRegistar.html
index 534009b..ccf2883 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/IgniteRepositoriesRegistar.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/IgniteRepositoriesRegistar.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/config/IgniteRepositoriesRegistar.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteRepositoriesRegistar (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/IgniteRepositoryConfigurationExtension.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/IgniteRepositoryConfigurationExtension.html
index 3969af2..0e40afd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/IgniteRepositoryConfigurationExtension.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/IgniteRepositoryConfigurationExtension.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/config/IgniteRepositoryConfigurationExtension.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteRepositoryConfigurationExtension (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/Query.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/Query.html
index 85e968f..ddbd99d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/Query.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/Query.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/config/Query.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Query (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/RepositoryConfig.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/RepositoryConfig.html
index 481b1a9..8b0633e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/RepositoryConfig.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/RepositoryConfig.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/config/RepositoryConfig.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>RepositoryConfig (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/class-use/DynamicQueryConfig.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/class-use/DynamicQueryConfig.html
index 8ab4b0b..475eab4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/class-use/DynamicQueryConfig.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/class-use/DynamicQueryConfig.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/config/class-use/DynamicQueryConfig.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata22.repository.config.DynamicQueryConfig (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/class-use/EnableIgniteRepositories.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/class-use/EnableIgniteRepositories.html
index cccb949..4ecbf63 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/class-use/EnableIgniteRepositories.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/class-use/EnableIgniteRepositories.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/config/class-use/EnableIgniteRepositories.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata22.repository.config.EnableIgniteRepositories (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/class-use/IgniteRepositoriesRegistar.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/class-use/IgniteRepositoriesRegistar.html
index 04df487..c0492bf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/class-use/IgniteRepositoriesRegistar.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/class-use/IgniteRepositoriesRegistar.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/config/class-use/IgniteRepositoriesRegistar.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata22.repository.config.IgniteRepositoriesRegistar (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/class-use/IgniteRepositoryConfigurationExtension.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/class-use/IgniteRepositoryConfigurationExtension.html
index 620b203..287640c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/class-use/IgniteRepositoryConfigurationExtension.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/class-use/IgniteRepositoryConfigurationExtension.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/config/class-use/IgniteRepositoryConfigurationExtension.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata22.repository.config.IgniteRepositoryConfigurationExtension (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/class-use/Query.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/class-use/Query.html
index d6af0d3..5b78fed 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/class-use/Query.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/class-use/Query.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/config/class-use/Query.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata22.repository.config.Query (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/class-use/RepositoryConfig.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/class-use/RepositoryConfig.html
index ea99324..b58c529 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/class-use/RepositoryConfig.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/class-use/RepositoryConfig.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/config/class-use/RepositoryConfig.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata22.repository.config.RepositoryConfig (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/package-frame.html
index 8fc4dcd..3c93b45 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/config/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata22.repository.config (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/package-summary.html
index b0981ed..91f3155 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/config/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata22.repository.config (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/package-tree.html
index 3d99348..ad2f2aa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/config/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata22.repository.config Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/package-use.html
index 9357056..d2c2710 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/config/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/config/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.springdata22.repository.config (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/package-frame.html
index abe9fd3..645a009 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata22.repository (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/package-summary.html
index 4ee7619..672a562 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata22.repository (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/package-tree.html
index 64d6a5d..ba327aa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata22.repository Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/package-use.html
index 4419f00..9064b06 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.springdata22.repository (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/IgniteQuery.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/IgniteQuery.html
index 91d0443..e42a9f9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/IgniteQuery.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/IgniteQuery.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/query/IgniteQuery.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteQuery (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/IgniteQueryGenerator.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/IgniteQueryGenerator.html
index 5d74bd8..e3fc552 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/IgniteQueryGenerator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/IgniteQueryGenerator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/query/IgniteQueryGenerator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteQueryGenerator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/IgniteRepositoryQuery.QueryCursorWrapper.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/IgniteRepositoryQuery.QueryCursorWrapper.html
index cefab72..16ce27c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/IgniteRepositoryQuery.QueryCursorWrapper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/IgniteRepositoryQuery.QueryCursorWrapper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/query/IgniteRepositoryQuery.QueryCursorWrapper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteRepositoryQuery.QueryCursorWrapper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/IgniteRepositoryQuery.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/IgniteRepositoryQuery.html
index 652e806..134fd04 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/IgniteRepositoryQuery.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/IgniteRepositoryQuery.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/query/IgniteRepositoryQuery.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteRepositoryQuery (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/QueryUtils.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/QueryUtils.html
index f6f882d..8f20ee0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/QueryUtils.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/QueryUtils.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/query/QueryUtils.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>QueryUtils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/class-use/IgniteQuery.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/class-use/IgniteQuery.html
index 6330e05..e4793d8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/class-use/IgniteQuery.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/class-use/IgniteQuery.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/query/class-use/IgniteQuery.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata22.repository.query.IgniteQuery (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/class-use/IgniteQueryGenerator.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/class-use/IgniteQueryGenerator.html
index 1f709d9..9186dfa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/class-use/IgniteQueryGenerator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/class-use/IgniteQueryGenerator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/query/class-use/IgniteQueryGenerator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata22.repository.query.IgniteQueryGenerator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/class-use/IgniteRepositoryQuery.QueryCursorWrapper.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/class-use/IgniteRepositoryQuery.QueryCursorWrapper.html
index 1a9a99c..0f69001 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/class-use/IgniteRepositoryQuery.QueryCursorWrapper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/class-use/IgniteRepositoryQuery.QueryCursorWrapper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/query/class-use/IgniteRepositoryQuery.QueryCursorWrapper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata22.repository.query.IgniteRepositoryQuery.QueryCursorWrapper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/class-use/IgniteRepositoryQuery.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/class-use/IgniteRepositoryQuery.html
index a7ea9c4..6dc293c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/class-use/IgniteRepositoryQuery.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/class-use/IgniteRepositoryQuery.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/query/class-use/IgniteRepositoryQuery.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata22.repository.query.IgniteRepositoryQuery (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/class-use/QueryUtils.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/class-use/QueryUtils.html
index f303227..e713328 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/class-use/QueryUtils.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/class-use/QueryUtils.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/query/class-use/QueryUtils.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata22.repository.query.QueryUtils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/package-frame.html
index 6eb1678..61f7421 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/query/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata22.repository.query (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/package-summary.html
index a53104f..112744e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/query/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata22.repository.query (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/package-tree.html
index c27e473..99236e9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/query/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata22.repository.query Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/package-use.html
index ad8bb38..330f926 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/query/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/query/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.springdata22.repository.query (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/ConditionFalse.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/ConditionFalse.html
index 44ba84f..ccc645e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/ConditionFalse.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/ConditionFalse.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/support/ConditionFalse.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ConditionFalse (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/IgniteRepositoryFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/IgniteRepositoryFactory.html
index 3b9197b..71fbba1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/IgniteRepositoryFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/IgniteRepositoryFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/support/IgniteRepositoryFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteRepositoryFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/IgniteRepositoryFactoryBean.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/IgniteRepositoryFactoryBean.html
index 1fbde82..a5bfa5a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/IgniteRepositoryFactoryBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/IgniteRepositoryFactoryBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/support/IgniteRepositoryFactoryBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteRepositoryFactoryBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/IgniteRepositoryImpl.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/IgniteRepositoryImpl.html
index 5998bcf..dc34d13 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/IgniteRepositoryImpl.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/IgniteRepositoryImpl.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/support/IgniteRepositoryImpl.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteRepositoryImpl (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/class-use/ConditionFalse.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/class-use/ConditionFalse.html
index f2fcbb6..a431405 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/class-use/ConditionFalse.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/class-use/ConditionFalse.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/support/class-use/ConditionFalse.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata22.repository.support.ConditionFalse (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/class-use/IgniteRepositoryFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/class-use/IgniteRepositoryFactory.html
index 3cd1feb..c9a8062 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/class-use/IgniteRepositoryFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/class-use/IgniteRepositoryFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/support/class-use/IgniteRepositoryFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata22.repository.support.IgniteRepositoryFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/class-use/IgniteRepositoryFactoryBean.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/class-use/IgniteRepositoryFactoryBean.html
index 3b0994e..d520ef9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/class-use/IgniteRepositoryFactoryBean.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/class-use/IgniteRepositoryFactoryBean.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/support/class-use/IgniteRepositoryFactoryBean.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata22.repository.support.IgniteRepositoryFactoryBean (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/class-use/IgniteRepositoryImpl.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/class-use/IgniteRepositoryImpl.html
index 5b67d6e..56010bc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/class-use/IgniteRepositoryImpl.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/class-use/IgniteRepositoryImpl.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/support/class-use/IgniteRepositoryImpl.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.springdata22.repository.support.IgniteRepositoryImpl (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/package-frame.html
index 6f614cd..0aa0407 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/support/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata22.repository.support (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/package-summary.html
index baa5b78..4102be4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/support/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata22.repository.support (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/package-tree.html
index 2ebd87a..bbd8c14 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/support/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.springdata22.repository.support Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/package-use.html
index b3472b7..9ea4943 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/springdata22/repository/support/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/springdata22/repository/support/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.springdata22.repository.support (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ssl/SSLContextWrapper.html b/releases/2.9.1/javadoc/org/apache/ignite/ssl/SSLContextWrapper.html
index 7b15548..d5603ad 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ssl/SSLContextWrapper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ssl/SSLContextWrapper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ssl/SSLContextWrapper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SSLContextWrapper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ssl/SslContextFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/ssl/SslContextFactory.html
index 9fc5b74..d353b94 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ssl/SslContextFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ssl/SslContextFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ssl/SslContextFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SslContextFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ssl/class-use/SSLContextWrapper.html b/releases/2.9.1/javadoc/org/apache/ignite/ssl/class-use/SSLContextWrapper.html
index 047d16a..2f56577 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ssl/class-use/SSLContextWrapper.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ssl/class-use/SSLContextWrapper.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ssl/class-use/SSLContextWrapper.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ssl.SSLContextWrapper (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ssl/class-use/SslContextFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/ssl/class-use/SslContextFactory.html
index b1315e7..4b3346b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ssl/class-use/SslContextFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ssl/class-use/SslContextFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ssl/class-use/SslContextFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.ssl.SslContextFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ssl/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/ssl/package-frame.html
index c9572fd..badb271 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ssl/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ssl/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ssl/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ssl (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ssl/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/ssl/package-summary.html
index 2f8577b..adc887f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ssl/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ssl/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ssl/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ssl (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ssl/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/ssl/package-tree.html
index 7fd06ee..beca964 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ssl/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ssl/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ssl/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.ssl Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/ssl/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/ssl/package-use.html
index e2e862a..b7da8d7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/ssl/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/ssl/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/ssl/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.ssl (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/startup/BasicWarmupClosure.html b/releases/2.9.1/javadoc/org/apache/ignite/startup/BasicWarmupClosure.html
index 3e13cf1..88bf046 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/startup/BasicWarmupClosure.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/startup/BasicWarmupClosure.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/startup/BasicWarmupClosure.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>BasicWarmupClosure (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/startup/class-use/BasicWarmupClosure.html b/releases/2.9.1/javadoc/org/apache/ignite/startup/class-use/BasicWarmupClosure.html
index 2d33d56..1648fff 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/startup/class-use/BasicWarmupClosure.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/startup/class-use/BasicWarmupClosure.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/startup/class-use/BasicWarmupClosure.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.startup.BasicWarmupClosure (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/AboutDialog.html b/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/AboutDialog.html
index 0ff60e4..68cd0ce 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/AboutDialog.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/AboutDialog.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/startup/cmdline/AboutDialog.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>AboutDialog (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/CommandLineRandomNumberGenerator.html b/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/CommandLineRandomNumberGenerator.html
index a8ce4e5..f89836b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/CommandLineRandomNumberGenerator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/CommandLineRandomNumberGenerator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/startup/cmdline/CommandLineRandomNumberGenerator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CommandLineRandomNumberGenerator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/CommandLineStartup.html b/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/CommandLineStartup.html
index 09f390f..f1896b5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/CommandLineStartup.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/CommandLineStartup.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/startup/cmdline/CommandLineStartup.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CommandLineStartup (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/CommandLineTransformer.html b/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/CommandLineTransformer.html
index 1d29d87..f300fbf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/CommandLineTransformer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/CommandLineTransformer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/startup/cmdline/CommandLineTransformer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CommandLineTransformer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/class-use/AboutDialog.html b/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/class-use/AboutDialog.html
index 591b2cb..b44ab03 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/class-use/AboutDialog.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/class-use/AboutDialog.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/startup/cmdline/class-use/AboutDialog.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.startup.cmdline.AboutDialog (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/class-use/CommandLineRandomNumberGenerator.html b/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/class-use/CommandLineRandomNumberGenerator.html
index a06dac1..1f79de5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/class-use/CommandLineRandomNumberGenerator.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/class-use/CommandLineRandomNumberGenerator.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/startup/cmdline/class-use/CommandLineRandomNumberGenerator.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.startup.cmdline.CommandLineRandomNumberGenerator (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/class-use/CommandLineStartup.html b/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/class-use/CommandLineStartup.html
index 4801f55..f84239a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/class-use/CommandLineStartup.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/class-use/CommandLineStartup.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/startup/cmdline/class-use/CommandLineStartup.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.startup.cmdline.CommandLineStartup (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/class-use/CommandLineTransformer.html b/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/class-use/CommandLineTransformer.html
index 89326a6..3495790 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/class-use/CommandLineTransformer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/class-use/CommandLineTransformer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/startup/cmdline/class-use/CommandLineTransformer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.startup.cmdline.CommandLineTransformer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/package-frame.html
index 8c93d43..ba2f395 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/startup/cmdline/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.startup.cmdline (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/package-summary.html
index 9476c62..b54a242 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/startup/cmdline/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.startup.cmdline (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/package-tree.html
index f9ba667..0079a72 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/startup/cmdline/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.startup.cmdline Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/package-use.html
index 66a28ec..207e2b5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/startup/cmdline/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/startup/cmdline/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.startup.cmdline (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/startup/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/startup/package-frame.html
index fb72d51..8eb3984 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/startup/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/startup/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/startup/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.startup (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/startup/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/startup/package-summary.html
index f13fb81..64860f2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/startup/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/startup/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/startup/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.startup (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/startup/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/startup/package-tree.html
index 64b399d..92d992e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/startup/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/startup/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/startup/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.startup Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/startup/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/startup/package-use.html
index 25ce03b..1684808 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/startup/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/startup/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/startup/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.startup (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/startup/servlet/ServletContextListenerStartup.html b/releases/2.9.1/javadoc/org/apache/ignite/startup/servlet/ServletContextListenerStartup.html
index 4defe67..77c75a5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/startup/servlet/ServletContextListenerStartup.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/startup/servlet/ServletContextListenerStartup.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/startup/servlet/ServletContextListenerStartup.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ServletContextListenerStartup (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/startup/servlet/ServletStartup.html b/releases/2.9.1/javadoc/org/apache/ignite/startup/servlet/ServletStartup.html
index 67c2477..4161356 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/startup/servlet/ServletStartup.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/startup/servlet/ServletStartup.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/startup/servlet/ServletStartup.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ServletStartup (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/startup/servlet/class-use/ServletContextListenerStartup.html b/releases/2.9.1/javadoc/org/apache/ignite/startup/servlet/class-use/ServletContextListenerStartup.html
index b94b9a2..8b72d0b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/startup/servlet/class-use/ServletContextListenerStartup.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/startup/servlet/class-use/ServletContextListenerStartup.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/startup/servlet/class-use/ServletContextListenerStartup.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.startup.servlet.ServletContextListenerStartup (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/startup/servlet/class-use/ServletStartup.html b/releases/2.9.1/javadoc/org/apache/ignite/startup/servlet/class-use/ServletStartup.html
index d3b3375..66ae4dc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/startup/servlet/class-use/ServletStartup.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/startup/servlet/class-use/ServletStartup.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/startup/servlet/class-use/ServletStartup.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.startup.servlet.ServletStartup (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/startup/servlet/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/startup/servlet/package-frame.html
index e5d5dff..3d418d8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/startup/servlet/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/startup/servlet/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/startup/servlet/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.startup.servlet (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/startup/servlet/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/startup/servlet/package-summary.html
index ec16b0e..4e7bcbb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/startup/servlet/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/startup/servlet/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/startup/servlet/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.startup.servlet (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/startup/servlet/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/startup/servlet/package-tree.html
index dcf0a95..517aa0c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/startup/servlet/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/startup/servlet/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/startup/servlet/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.startup.servlet Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/startup/servlet/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/startup/servlet/package-use.html
index c5de319..1fe7770 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/startup/servlet/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/startup/servlet/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/startup/servlet/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.startup.servlet (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/StreamAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/StreamAdapter.html
index fa447f9..1078434 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/StreamAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/StreamAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/StreamAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>StreamAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/StreamMultipleTupleExtractor.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/StreamMultipleTupleExtractor.html
index 05cc812..a0e6859 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/StreamMultipleTupleExtractor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/StreamMultipleTupleExtractor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/StreamMultipleTupleExtractor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>StreamMultipleTupleExtractor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/StreamReceiver.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/StreamReceiver.html
index d2c5edc..26b7741 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/StreamReceiver.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/StreamReceiver.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/StreamReceiver.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>StreamReceiver (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/StreamSingleTupleExtractor.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/StreamSingleTupleExtractor.html
index 1862d29..baac586 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/StreamSingleTupleExtractor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/StreamSingleTupleExtractor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/StreamSingleTupleExtractor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>StreamSingleTupleExtractor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/StreamTransformer.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/StreamTransformer.html
index d901dc5..3d498f3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/StreamTransformer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/StreamTransformer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/StreamTransformer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>StreamTransformer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/StreamTupleExtractor.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/StreamTupleExtractor.html
index 4932e2e..8ad68a0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/StreamTupleExtractor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/StreamTupleExtractor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/StreamTupleExtractor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>StreamTupleExtractor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/StreamVisitor.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/StreamVisitor.html
index d253bf1..acf15be 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/StreamVisitor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/StreamVisitor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/StreamVisitor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>StreamVisitor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/camel/CamelStreamer.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/camel/CamelStreamer.html
index 653a68c..ddf63f0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/camel/CamelStreamer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/camel/CamelStreamer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/camel/CamelStreamer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CamelStreamer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/camel/class-use/CamelStreamer.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/camel/class-use/CamelStreamer.html
index 5fb8442..ff00648 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/camel/class-use/CamelStreamer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/camel/class-use/CamelStreamer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/camel/class-use/CamelStreamer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.stream.camel.CamelStreamer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/camel/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/camel/package-frame.html
index f7e6497..023b674 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/camel/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/camel/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/camel/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.stream.camel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/camel/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/camel/package-summary.html
index 4bdccda..754f07d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/camel/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/camel/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/camel/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.stream.camel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/camel/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/camel/package-tree.html
index 377b222..c48bd6f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/camel/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/camel/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/camel/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.stream.camel Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/camel/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/camel/package-use.html
index 98aac9d..41e39e7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/camel/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/camel/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/camel/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.stream.camel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/class-use/StreamAdapter.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/class-use/StreamAdapter.html
index 5f14ae2..9f20227 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/class-use/StreamAdapter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/class-use/StreamAdapter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/class-use/StreamAdapter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.stream.StreamAdapter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/class-use/StreamMultipleTupleExtractor.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/class-use/StreamMultipleTupleExtractor.html
index ebbf40a..6260030 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/class-use/StreamMultipleTupleExtractor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/class-use/StreamMultipleTupleExtractor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/class-use/StreamMultipleTupleExtractor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.stream.StreamMultipleTupleExtractor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/class-use/StreamReceiver.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/class-use/StreamReceiver.html
index d6511cd..38e835b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/class-use/StreamReceiver.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/class-use/StreamReceiver.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/class-use/StreamReceiver.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.stream.StreamReceiver (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/class-use/StreamSingleTupleExtractor.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/class-use/StreamSingleTupleExtractor.html
index bad5f92..b674410 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/class-use/StreamSingleTupleExtractor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/class-use/StreamSingleTupleExtractor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/class-use/StreamSingleTupleExtractor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.stream.StreamSingleTupleExtractor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/class-use/StreamTransformer.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/class-use/StreamTransformer.html
index 8505a89..aa173ee 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/class-use/StreamTransformer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/class-use/StreamTransformer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/class-use/StreamTransformer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.stream.StreamTransformer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/class-use/StreamTupleExtractor.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/class-use/StreamTupleExtractor.html
index b26f60e..e95a898 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/class-use/StreamTupleExtractor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/class-use/StreamTupleExtractor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/class-use/StreamTupleExtractor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.stream.StreamTupleExtractor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/class-use/StreamVisitor.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/class-use/StreamVisitor.html
index fbc8c5f..bad02e0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/class-use/StreamVisitor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/class-use/StreamVisitor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/class-use/StreamVisitor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.stream.StreamVisitor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/jms11/JmsStreamer.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/jms11/JmsStreamer.html
index f089e7e..eb7042d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/jms11/JmsStreamer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/jms11/JmsStreamer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/jms11/JmsStreamer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>JmsStreamer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/jms11/MessageTransformer.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/jms11/MessageTransformer.html
index 8b92d04..e8db591 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/jms11/MessageTransformer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/jms11/MessageTransformer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/jms11/MessageTransformer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MessageTransformer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/jms11/class-use/JmsStreamer.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/jms11/class-use/JmsStreamer.html
index 722506e..f2cfb69 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/jms11/class-use/JmsStreamer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/jms11/class-use/JmsStreamer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/jms11/class-use/JmsStreamer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.stream.jms11.JmsStreamer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/jms11/class-use/MessageTransformer.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/jms11/class-use/MessageTransformer.html
index 187a554..e8ba6ed 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/jms11/class-use/MessageTransformer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/jms11/class-use/MessageTransformer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/jms11/class-use/MessageTransformer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.stream.jms11.MessageTransformer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/jms11/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/jms11/package-frame.html
index 0a88fff..267cbf3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/jms11/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/jms11/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/jms11/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.stream.jms11 (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/jms11/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/jms11/package-summary.html
index 45a83b9..b8ed76b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/jms11/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/jms11/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/jms11/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.stream.jms11 (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/jms11/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/jms11/package-tree.html
index a86bffc..ce85860 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/jms11/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/jms11/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/jms11/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.stream.jms11 Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/jms11/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/jms11/package-use.html
index 7d84a03..ab2906b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/jms11/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/jms11/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/jms11/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.stream.jms11 (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/KafkaStreamer.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/KafkaStreamer.html
index e93f41e..40b6669 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/KafkaStreamer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/KafkaStreamer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/kafka/KafkaStreamer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>KafkaStreamer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/class-use/KafkaStreamer.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/class-use/KafkaStreamer.html
index e896b4b..13312e7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/class-use/KafkaStreamer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/class-use/KafkaStreamer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/kafka/class-use/KafkaStreamer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.stream.kafka.KafkaStreamer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/IgniteSinkConnector.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/IgniteSinkConnector.html
index c46816f..c416478 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/IgniteSinkConnector.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/IgniteSinkConnector.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/kafka/connect/IgniteSinkConnector.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteSinkConnector (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/IgniteSinkConstants.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/IgniteSinkConstants.html
index 9d21148..b95ae11 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/IgniteSinkConstants.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/IgniteSinkConstants.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/kafka/connect/IgniteSinkConstants.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteSinkConstants (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/IgniteSinkTask.StreamerContext.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/IgniteSinkTask.StreamerContext.html
index d644ad7..164e02e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/IgniteSinkTask.StreamerContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/IgniteSinkTask.StreamerContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/kafka/connect/IgniteSinkTask.StreamerContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteSinkTask.StreamerContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/IgniteSinkTask.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/IgniteSinkTask.html
index d2b2cf9..4fd1e8a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/IgniteSinkTask.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/IgniteSinkTask.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/kafka/connect/IgniteSinkTask.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteSinkTask (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/IgniteSourceConnector.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/IgniteSourceConnector.html
index 5277919..3a528ae 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/IgniteSourceConnector.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/IgniteSourceConnector.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/kafka/connect/IgniteSourceConnector.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteSourceConnector (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/IgniteSourceConstants.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/IgniteSourceConstants.html
index 4eee0c1..330df35 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/IgniteSourceConstants.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/IgniteSourceConstants.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/kafka/connect/IgniteSourceConstants.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteSourceConstants (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/IgniteSourceTask.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/IgniteSourceTask.html
index 1b4b2d7..3608d71 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/IgniteSourceTask.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/IgniteSourceTask.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/kafka/connect/IgniteSourceTask.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteSourceTask (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/class-use/IgniteSinkConnector.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/class-use/IgniteSinkConnector.html
index 9161e66..0148bd2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/class-use/IgniteSinkConnector.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/class-use/IgniteSinkConnector.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/kafka/connect/class-use/IgniteSinkConnector.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.stream.kafka.connect.IgniteSinkConnector (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/class-use/IgniteSinkConstants.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/class-use/IgniteSinkConstants.html
index 8ff5613..21bf788 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/class-use/IgniteSinkConstants.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/class-use/IgniteSinkConstants.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/kafka/connect/class-use/IgniteSinkConstants.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.stream.kafka.connect.IgniteSinkConstants (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/class-use/IgniteSinkTask.StreamerContext.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/class-use/IgniteSinkTask.StreamerContext.html
index 111aaf6..4ddf3b4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/class-use/IgniteSinkTask.StreamerContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/class-use/IgniteSinkTask.StreamerContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/kafka/connect/class-use/IgniteSinkTask.StreamerContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.stream.kafka.connect.IgniteSinkTask.StreamerContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/class-use/IgniteSinkTask.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/class-use/IgniteSinkTask.html
index e814e85..bbf59c5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/class-use/IgniteSinkTask.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/class-use/IgniteSinkTask.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/kafka/connect/class-use/IgniteSinkTask.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.stream.kafka.connect.IgniteSinkTask (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/class-use/IgniteSourceConnector.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/class-use/IgniteSourceConnector.html
index b833355..be5817f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/class-use/IgniteSourceConnector.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/class-use/IgniteSourceConnector.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/kafka/connect/class-use/IgniteSourceConnector.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.stream.kafka.connect.IgniteSourceConnector (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/class-use/IgniteSourceConstants.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/class-use/IgniteSourceConstants.html
index 4870795..deb0175 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/class-use/IgniteSourceConstants.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/class-use/IgniteSourceConstants.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/kafka/connect/class-use/IgniteSourceConstants.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.stream.kafka.connect.IgniteSourceConstants (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/class-use/IgniteSourceTask.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/class-use/IgniteSourceTask.html
index 8cb8129..59518cb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/class-use/IgniteSourceTask.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/class-use/IgniteSourceTask.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/kafka/connect/class-use/IgniteSourceTask.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.stream.kafka.connect.IgniteSourceTask (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/package-frame.html
index 7d68fe0..ce88f6b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/kafka/connect/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.stream.kafka.connect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/package-summary.html
index 76061c3..72c0169 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/kafka/connect/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.stream.kafka.connect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/package-tree.html
index b8a7de1..e304043 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/kafka/connect/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.stream.kafka.connect Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/package-use.html
index b8a2b4f..abf73df 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/kafka/connect/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.stream.kafka.connect (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/CacheEventConverter.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/CacheEventConverter.html
index 55e7843..7c285ae 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/CacheEventConverter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/CacheEventConverter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/kafka/connect/serialization/CacheEventConverter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheEventConverter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/CacheEventDeserializer.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/CacheEventDeserializer.html
index 25cf4c6..da9b387 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/CacheEventDeserializer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/CacheEventDeserializer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/kafka/connect/serialization/CacheEventDeserializer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheEventDeserializer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/CacheEventSerializer.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/CacheEventSerializer.html
index eb3beb1..edd50fd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/CacheEventSerializer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/CacheEventSerializer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/kafka/connect/serialization/CacheEventSerializer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>CacheEventSerializer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/class-use/CacheEventConverter.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/class-use/CacheEventConverter.html
index dde667e..79ba954 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/class-use/CacheEventConverter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/class-use/CacheEventConverter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/kafka/connect/serialization/class-use/CacheEventConverter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.stream.kafka.connect.serialization.CacheEventConverter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/class-use/CacheEventDeserializer.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/class-use/CacheEventDeserializer.html
index 8ae64b1..1d19820 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/class-use/CacheEventDeserializer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/class-use/CacheEventDeserializer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/kafka/connect/serialization/class-use/CacheEventDeserializer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.stream.kafka.connect.serialization.CacheEventDeserializer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/class-use/CacheEventSerializer.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/class-use/CacheEventSerializer.html
index 2d36df5..aee34f4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/class-use/CacheEventSerializer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/class-use/CacheEventSerializer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/kafka/connect/serialization/class-use/CacheEventSerializer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.stream.kafka.connect.serialization.CacheEventSerializer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/package-frame.html
index 946d510..e285c18 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/kafka/connect/serialization/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.stream.kafka.connect.serialization (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/package-summary.html
index 3aa2f83..052d561 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/kafka/connect/serialization/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.stream.kafka.connect.serialization (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/package-tree.html
index c0fdf04..d73722a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/kafka/connect/serialization/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.stream.kafka.connect.serialization Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/package-use.html
index ac15dfe..c6a6728 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/connect/serialization/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/kafka/connect/serialization/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.stream.kafka.connect.serialization (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/package-frame.html
index 1af6318..f42641c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/kafka/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.stream.kafka (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/package-summary.html
index 018dd50..ca14936 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/kafka/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.stream.kafka (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/package-tree.html
index f87d6e4..4df071b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/kafka/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.stream.kafka Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/package-use.html
index e3514e4..40428d0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/kafka/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/kafka/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.stream.kafka (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/mqtt/MqttStreamer.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/mqtt/MqttStreamer.html
index 73fbee7..3667ddc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/mqtt/MqttStreamer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/mqtt/MqttStreamer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/mqtt/MqttStreamer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>MqttStreamer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/mqtt/class-use/MqttStreamer.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/mqtt/class-use/MqttStreamer.html
index f0a74bd..a78c215 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/mqtt/class-use/MqttStreamer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/mqtt/class-use/MqttStreamer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/mqtt/class-use/MqttStreamer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.stream.mqtt.MqttStreamer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/mqtt/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/mqtt/package-frame.html
index f4c2170..3ae9c6b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/mqtt/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/mqtt/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/mqtt/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.stream.mqtt (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/mqtt/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/mqtt/package-summary.html
index 9c01552..5f47c3d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/mqtt/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/mqtt/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/mqtt/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.stream.mqtt (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/mqtt/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/mqtt/package-tree.html
index 7232bc6..e3c653c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/mqtt/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/mqtt/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/mqtt/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.stream.mqtt Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/mqtt/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/mqtt/package-use.html
index 621db70..8d5b718 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/mqtt/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/mqtt/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/mqtt/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.stream.mqtt (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/package-frame.html
index 4d5ebd2..1602de0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.stream (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/package-summary.html
index e38aa7c..29deb75 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.stream (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/package-tree.html
index 63e0a8b..34cfdf7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.stream Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/package-use.html
index 0d41858..d52fa42 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.stream (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/socket/SocketMessageConverter.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/socket/SocketMessageConverter.html
index 5a1b9b7..9a3a9d1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/socket/SocketMessageConverter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/socket/SocketMessageConverter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/socket/SocketMessageConverter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SocketMessageConverter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/socket/SocketStreamer.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/socket/SocketStreamer.html
index 72758b8..54915ce 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/socket/SocketStreamer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/socket/SocketStreamer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/socket/SocketStreamer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SocketStreamer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/socket/class-use/SocketMessageConverter.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/socket/class-use/SocketMessageConverter.html
index d672ee6..65b1bfe 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/socket/class-use/SocketMessageConverter.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/socket/class-use/SocketMessageConverter.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/socket/class-use/SocketMessageConverter.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.stream.socket.SocketMessageConverter (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/socket/class-use/SocketStreamer.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/socket/class-use/SocketStreamer.html
index d3bfff7..a4c6028 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/socket/class-use/SocketStreamer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/socket/class-use/SocketStreamer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/socket/class-use/SocketStreamer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.stream.socket.SocketStreamer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/socket/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/socket/package-frame.html
index df5890f..e1edc88 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/socket/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/socket/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/socket/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.stream.socket (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/socket/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/socket/package-summary.html
index 2555a23..82ff1f6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/socket/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/socket/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/socket/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.stream.socket (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/socket/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/socket/package-tree.html
index 828eb9a..c48f3ed 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/socket/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/socket/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/socket/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.stream.socket Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/socket/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/socket/package-use.html
index e984a87..8bafd37 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/socket/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/socket/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/socket/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.stream.socket (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/storm/StormStreamer.StreamerContext.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/storm/StormStreamer.StreamerContext.html
index cc88b35..a42b8da 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/storm/StormStreamer.StreamerContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/storm/StormStreamer.StreamerContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/storm/StormStreamer.StreamerContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>StormStreamer.StreamerContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/storm/StormStreamer.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/storm/StormStreamer.html
index e98ed03..dfcef85 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/storm/StormStreamer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/storm/StormStreamer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/storm/StormStreamer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>StormStreamer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/storm/class-use/StormStreamer.StreamerContext.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/storm/class-use/StormStreamer.StreamerContext.html
index ab0342d..11501c3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/storm/class-use/StormStreamer.StreamerContext.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/storm/class-use/StormStreamer.StreamerContext.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/storm/class-use/StormStreamer.StreamerContext.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.stream.storm.StormStreamer.StreamerContext (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/storm/class-use/StormStreamer.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/storm/class-use/StormStreamer.html
index 7dad8b7..67fdf00 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/storm/class-use/StormStreamer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/storm/class-use/StormStreamer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/storm/class-use/StormStreamer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.stream.storm.StormStreamer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/storm/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/storm/package-frame.html
index 8e9c8d3..5d3eea1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/storm/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/storm/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/storm/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.stream.storm (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/storm/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/storm/package-summary.html
index e4fa82b..ed01fcd 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/storm/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/storm/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/storm/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.stream.storm (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/storm/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/storm/package-tree.html
index 135152b..588298b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/storm/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/storm/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/storm/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.stream.storm Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/stream/storm/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/stream/storm/package-use.html
index 0de01be..7db466a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/stream/storm/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/stream/storm/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/stream/storm/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.stream.storm (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/thread/IgniteStripedThreadPoolExecutor.html b/releases/2.9.1/javadoc/org/apache/ignite/thread/IgniteStripedThreadPoolExecutor.html
index 15910f1..5baf2f1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/thread/IgniteStripedThreadPoolExecutor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/thread/IgniteStripedThreadPoolExecutor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/thread/IgniteStripedThreadPoolExecutor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:04 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteStripedThreadPoolExecutor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/thread/IgniteThread.html b/releases/2.9.1/javadoc/org/apache/ignite/thread/IgniteThread.html
index 3857f12..1c9ecaf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/thread/IgniteThread.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/thread/IgniteThread.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/thread/IgniteThread.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:04 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteThread (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/thread/IgniteThreadFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/thread/IgniteThreadFactory.html
index d50e1da..67e5a4d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/thread/IgniteThreadFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/thread/IgniteThreadFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/thread/IgniteThreadFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:04 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteThreadFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/thread/IgniteThreadPoolExecutor.html b/releases/2.9.1/javadoc/org/apache/ignite/thread/IgniteThreadPoolExecutor.html
index b2df6a3..1248a03 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/thread/IgniteThreadPoolExecutor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/thread/IgniteThreadPoolExecutor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/thread/IgniteThreadPoolExecutor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:04 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteThreadPoolExecutor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/thread/OomExceptionHandler.html b/releases/2.9.1/javadoc/org/apache/ignite/thread/OomExceptionHandler.html
index ecb4787..0add19b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/thread/OomExceptionHandler.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/thread/OomExceptionHandler.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/thread/OomExceptionHandler.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:04 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>OomExceptionHandler (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/thread/class-use/IgniteStripedThreadPoolExecutor.html b/releases/2.9.1/javadoc/org/apache/ignite/thread/class-use/IgniteStripedThreadPoolExecutor.html
index 23fe9b0..d6e0e29 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/thread/class-use/IgniteStripedThreadPoolExecutor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/thread/class-use/IgniteStripedThreadPoolExecutor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/thread/class-use/IgniteStripedThreadPoolExecutor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.thread.IgniteStripedThreadPoolExecutor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/thread/class-use/IgniteThread.html b/releases/2.9.1/javadoc/org/apache/ignite/thread/class-use/IgniteThread.html
index 983def2..630f918 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/thread/class-use/IgniteThread.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/thread/class-use/IgniteThread.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/thread/class-use/IgniteThread.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.thread.IgniteThread (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/thread/class-use/IgniteThreadFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/thread/class-use/IgniteThreadFactory.html
index 3319f49..1565369 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/thread/class-use/IgniteThreadFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/thread/class-use/IgniteThreadFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/thread/class-use/IgniteThreadFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.thread.IgniteThreadFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/thread/class-use/IgniteThreadPoolExecutor.html b/releases/2.9.1/javadoc/org/apache/ignite/thread/class-use/IgniteThreadPoolExecutor.html
index 85f48b1..2a22c43 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/thread/class-use/IgniteThreadPoolExecutor.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/thread/class-use/IgniteThreadPoolExecutor.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/thread/class-use/IgniteThreadPoolExecutor.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.thread.IgniteThreadPoolExecutor (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/thread/class-use/OomExceptionHandler.html b/releases/2.9.1/javadoc/org/apache/ignite/thread/class-use/OomExceptionHandler.html
index 7b4c37c..db5c267 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/thread/class-use/OomExceptionHandler.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/thread/class-use/OomExceptionHandler.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/thread/class-use/OomExceptionHandler.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.thread.OomExceptionHandler (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/thread/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/thread/package-frame.html
index c86b6b8..5a5c519 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/thread/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/thread/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/thread/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.thread (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/thread/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/thread/package-summary.html
index c4ff340..62bb49e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/thread/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/thread/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/thread/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.thread (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/thread/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/thread/package-tree.html
index f0035bf..9c014bf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/thread/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/thread/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/thread/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.thread Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/thread/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/thread/package-use.html
index ff3741c..136b380 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/thread/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/thread/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/thread/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.thread (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/Transaction.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/Transaction.html
index c9c200e..9665e3c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/Transaction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/Transaction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/Transaction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Transaction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionAlreadyCompletedException.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionAlreadyCompletedException.html
index 7eca89d..81375eb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionAlreadyCompletedException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionAlreadyCompletedException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/TransactionAlreadyCompletedException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TransactionAlreadyCompletedException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionConcurrency.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionConcurrency.html
index bb04d3b..858f076 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionConcurrency.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionConcurrency.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/TransactionConcurrency.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TransactionConcurrency (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionDeadlockException.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionDeadlockException.html
index df7dee8..733eaf1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionDeadlockException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionDeadlockException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/TransactionDeadlockException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TransactionDeadlockException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionDuplicateKeyException.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionDuplicateKeyException.html
index e96ce36..05ba3df 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionDuplicateKeyException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionDuplicateKeyException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/TransactionDuplicateKeyException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TransactionDuplicateKeyException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionException.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionException.html
index 414bfd1..cef0cac 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/TransactionException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TransactionException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionHeuristicException.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionHeuristicException.html
index 24b3c6f..121e574 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionHeuristicException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionHeuristicException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/TransactionHeuristicException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TransactionHeuristicException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionIsolation.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionIsolation.html
index 2d4bfbd..be55bd0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionIsolation.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionIsolation.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/TransactionIsolation.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TransactionIsolation (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionMetrics.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionMetrics.html
index 4ade857..fbc58d9 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionMetrics.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionMetrics.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/TransactionMetrics.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TransactionMetrics (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionMixedModeException.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionMixedModeException.html
index 5216e96..500b5d2 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionMixedModeException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionMixedModeException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/TransactionMixedModeException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TransactionMixedModeException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionOptimisticException.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionOptimisticException.html
index 8ba39e3..f211391 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionOptimisticException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionOptimisticException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/TransactionOptimisticException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TransactionOptimisticException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionRollbackException.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionRollbackException.html
index 826c3f9..b838643 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionRollbackException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionRollbackException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/TransactionRollbackException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TransactionRollbackException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionSerializationException.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionSerializationException.html
index 0270bd5..00a99fb 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionSerializationException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionSerializationException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/TransactionSerializationException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TransactionSerializationException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionState.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionState.html
index 5b55e87..056424c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionState.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionState.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/TransactionState.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TransactionState (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionTimeoutException.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionTimeoutException.html
index 524c1e7..d232efa 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionTimeoutException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionTimeoutException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/TransactionTimeoutException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TransactionTimeoutException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionUnsupportedConcurrencyException.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionUnsupportedConcurrencyException.html
index 2b99e6a..86effb0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionUnsupportedConcurrencyException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/TransactionUnsupportedConcurrencyException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/TransactionUnsupportedConcurrencyException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:07 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>TransactionUnsupportedConcurrencyException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/Transaction.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/Transaction.html
index b7c6ae6..19edb8c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/Transaction.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/Transaction.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/class-use/Transaction.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.transactions.Transaction (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionAlreadyCompletedException.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionAlreadyCompletedException.html
index 266bd7f..6ca682b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionAlreadyCompletedException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionAlreadyCompletedException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/class-use/TransactionAlreadyCompletedException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.transactions.TransactionAlreadyCompletedException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionConcurrency.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionConcurrency.html
index a1cea6e..bf256df 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionConcurrency.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionConcurrency.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/class-use/TransactionConcurrency.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.transactions.TransactionConcurrency (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionDeadlockException.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionDeadlockException.html
index a06840e..2170e86 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionDeadlockException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionDeadlockException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/class-use/TransactionDeadlockException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.transactions.TransactionDeadlockException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionDuplicateKeyException.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionDuplicateKeyException.html
index 3402fc8..41e8b40 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionDuplicateKeyException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionDuplicateKeyException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/class-use/TransactionDuplicateKeyException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.transactions.TransactionDuplicateKeyException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionException.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionException.html
index dc91ae9..1288880 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/class-use/TransactionException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.transactions.TransactionException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionHeuristicException.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionHeuristicException.html
index 0616a16..026a1f4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionHeuristicException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionHeuristicException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/class-use/TransactionHeuristicException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.transactions.TransactionHeuristicException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionIsolation.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionIsolation.html
index 5d89466..214f059 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionIsolation.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionIsolation.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/class-use/TransactionIsolation.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.transactions.TransactionIsolation (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionMetrics.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionMetrics.html
index 70d233e..265785f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionMetrics.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionMetrics.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/class-use/TransactionMetrics.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.transactions.TransactionMetrics (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionMixedModeException.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionMixedModeException.html
index e3a9b34..a2a3cb6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionMixedModeException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionMixedModeException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/class-use/TransactionMixedModeException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.transactions.TransactionMixedModeException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionOptimisticException.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionOptimisticException.html
index 8004cee..2c9de09 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionOptimisticException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionOptimisticException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/class-use/TransactionOptimisticException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.transactions.TransactionOptimisticException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionRollbackException.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionRollbackException.html
index a2b5913..3547324 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionRollbackException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionRollbackException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/class-use/TransactionRollbackException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.transactions.TransactionRollbackException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionSerializationException.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionSerializationException.html
index 3587068..7ee2a02 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionSerializationException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionSerializationException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/class-use/TransactionSerializationException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.transactions.TransactionSerializationException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionState.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionState.html
index bd29bf3..8921d37 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionState.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionState.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/class-use/TransactionState.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.transactions.TransactionState (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionTimeoutException.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionTimeoutException.html
index faec449..7195aa0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionTimeoutException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionTimeoutException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/class-use/TransactionTimeoutException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.transactions.TransactionTimeoutException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionUnsupportedConcurrencyException.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionUnsupportedConcurrencyException.html
index b95640f..02c843b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionUnsupportedConcurrencyException.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/class-use/TransactionUnsupportedConcurrencyException.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/class-use/TransactionUnsupportedConcurrencyException.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.transactions.TransactionUnsupportedConcurrencyException (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/package-frame.html
index 41bd73d..27ba97d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.transactions (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/package-summary.html
index 347ea88..afb8e73 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.transactions (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/package-tree.html
index d2bf68a..3831da5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.transactions Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/package-use.html
index 6345d34..97b370a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.transactions (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/spring/SpringTransactionManager.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/spring/SpringTransactionManager.html
index fd6662a..4100cce 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/spring/SpringTransactionManager.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/spring/SpringTransactionManager.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/spring/SpringTransactionManager.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:09 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>SpringTransactionManager (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/spring/class-use/SpringTransactionManager.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/spring/class-use/SpringTransactionManager.html
index e536a44..e6ccc08 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/spring/class-use/SpringTransactionManager.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/spring/class-use/SpringTransactionManager.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/spring/class-use/SpringTransactionManager.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.transactions.spring.SpringTransactionManager (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/spring/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/spring/package-frame.html
index 8a1c283..f693b9d 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/spring/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/spring/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/spring/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.transactions.spring (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/spring/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/spring/package-summary.html
index 321f039..29fcdc7 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/spring/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/spring/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/spring/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.transactions.spring (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/spring/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/spring/package-tree.html
index b4104d3..0067568 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/spring/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/spring/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/spring/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.transactions.spring Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/transactions/spring/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/transactions/spring/package-use.html
index 1ff6dec..4ebc37c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/transactions/spring/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/transactions/spring/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/transactions/spring/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.transactions.spring (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorExtensionPoint.html b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorExtensionPoint.html
index 4b4923f..1a21526 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorExtensionPoint.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorExtensionPoint.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/visor/plugin/VisorExtensionPoint.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>VisorExtensionPoint (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorPluggableTab.html b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorPluggableTab.html
index dc0e382..3f564cf 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorPluggableTab.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorPluggableTab.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/visor/plugin/VisorPluggableTab.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>VisorPluggableTab (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorPlugin.html b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorPlugin.html
index d38a760..2549d8b 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorPlugin.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorPlugin.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/visor/plugin/VisorPlugin.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>VisorPlugin (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorPluginComponent.html b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorPluginComponent.html
index 6ed3380..fce2306 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorPluginComponent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorPluginComponent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/visor/plugin/VisorPluginComponent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>VisorPluginComponent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorPluginComponentsFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorPluginComponentsFactory.html
index 54f3fb4..51514d4 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorPluginComponentsFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorPluginComponentsFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/visor/plugin/VisorPluginComponentsFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>VisorPluginComponentsFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorPluginLogPanel.html b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorPluginLogPanel.html
index 8a717e8..7863ed3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorPluginLogPanel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorPluginLogPanel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/visor/plugin/VisorPluginLogPanel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>VisorPluginLogPanel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorPluginModel.html b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorPluginModel.html
index 071f0b6..e06070f 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorPluginModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorPluginModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/visor/plugin/VisorPluginModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>VisorPluginModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorPluginNodesPanel.html b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorPluginNodesPanel.html
index 0b6a2da..359615c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorPluginNodesPanel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorPluginNodesPanel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/visor/plugin/VisorPluginNodesPanel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>VisorPluginNodesPanel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorSelectionListener.html b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorSelectionListener.html
index 191d32f..6b9f222 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorSelectionListener.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorSelectionListener.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/visor/plugin/VisorSelectionListener.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>VisorSelectionListener (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorTopologyListener.html b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorTopologyListener.html
index cb49c9c..ceec1d1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorTopologyListener.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/VisorTopologyListener.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/visor/plugin/VisorTopologyListener.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>VisorTopologyListener (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorExtensionPoint.html b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorExtensionPoint.html
index b755e76..32515cc 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorExtensionPoint.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorExtensionPoint.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/visor/plugin/class-use/VisorExtensionPoint.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.visor.plugin.VisorExtensionPoint (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorPluggableTab.html b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorPluggableTab.html
index b1e8202..ccf9156 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorPluggableTab.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorPluggableTab.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/visor/plugin/class-use/VisorPluggableTab.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.visor.plugin.VisorPluggableTab (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorPlugin.html b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorPlugin.html
index c857b66..2564c66 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorPlugin.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorPlugin.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/visor/plugin/class-use/VisorPlugin.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.visor.plugin.VisorPlugin (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorPluginComponent.html b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorPluginComponent.html
index e74e3b9..57f61f3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorPluginComponent.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorPluginComponent.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/visor/plugin/class-use/VisorPluginComponent.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.visor.plugin.VisorPluginComponent (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorPluginComponentsFactory.html b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorPluginComponentsFactory.html
index c3b3279..9b859f5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorPluginComponentsFactory.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorPluginComponentsFactory.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/visor/plugin/class-use/VisorPluginComponentsFactory.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.visor.plugin.VisorPluginComponentsFactory (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorPluginLogPanel.html b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorPluginLogPanel.html
index 25981bf..deaaa2a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorPluginLogPanel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorPluginLogPanel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/visor/plugin/class-use/VisorPluginLogPanel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.visor.plugin.VisorPluginLogPanel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorPluginModel.html b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorPluginModel.html
index 46dfb30..41ef5a5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorPluginModel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorPluginModel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/visor/plugin/class-use/VisorPluginModel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.visor.plugin.VisorPluginModel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorPluginNodesPanel.html b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorPluginNodesPanel.html
index 8adf645..3e7b43a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorPluginNodesPanel.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorPluginNodesPanel.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/visor/plugin/class-use/VisorPluginNodesPanel.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.visor.plugin.VisorPluginNodesPanel (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorSelectionListener.html b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorSelectionListener.html
index 8230ec0..59d2ece 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorSelectionListener.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorSelectionListener.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/visor/plugin/class-use/VisorSelectionListener.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.visor.plugin.VisorSelectionListener (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorTopologyListener.html b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorTopologyListener.html
index 22fcacb..01b5d3e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorTopologyListener.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/class-use/VisorTopologyListener.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/visor/plugin/class-use/VisorTopologyListener.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Interface org.apache.ignite.visor.plugin.VisorTopologyListener (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/package-frame.html
index 99f9f47..d0ae7c0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/visor/plugin/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.visor.plugin (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/package-summary.html
index 148b1d2..c54b530 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/visor/plugin/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.visor.plugin (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/package-tree.html
index 0964511..3562057 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/visor/plugin/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.visor.plugin Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/package-use.html
index fb9376e..02d08c0 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/visor/plugin/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/visor/plugin/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.visor.plugin (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/yarn/ApplicationMaster.html b/releases/2.9.1/javadoc/org/apache/ignite/yarn/ApplicationMaster.html
index 2da9c73..e3ff920 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/yarn/ApplicationMaster.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/yarn/ApplicationMaster.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/yarn/ApplicationMaster.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ApplicationMaster (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/yarn/ClusterProperties.html b/releases/2.9.1/javadoc/org/apache/ignite/yarn/ClusterProperties.html
index 4a276b5..12c290c 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/yarn/ClusterProperties.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/yarn/ClusterProperties.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/yarn/ClusterProperties.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ClusterProperties (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/yarn/IgniteContainer.html b/releases/2.9.1/javadoc/org/apache/ignite/yarn/IgniteContainer.html
index 7e5d1fa..8ace4d6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/yarn/IgniteContainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/yarn/IgniteContainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/yarn/IgniteContainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteContainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/yarn/IgniteProvider.html b/releases/2.9.1/javadoc/org/apache/ignite/yarn/IgniteProvider.html
index 68f3609..41d88d6 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/yarn/IgniteProvider.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/yarn/IgniteProvider.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/yarn/IgniteProvider.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteProvider (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/yarn/IgniteYarnClient.html b/releases/2.9.1/javadoc/org/apache/ignite/yarn/IgniteYarnClient.html
index 8a3a092..57e4d55 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/yarn/IgniteYarnClient.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/yarn/IgniteYarnClient.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/yarn/IgniteYarnClient.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteYarnClient (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/yarn/class-use/ApplicationMaster.html b/releases/2.9.1/javadoc/org/apache/ignite/yarn/class-use/ApplicationMaster.html
index 8acfebc..cf928ff 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/yarn/class-use/ApplicationMaster.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/yarn/class-use/ApplicationMaster.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/yarn/class-use/ApplicationMaster.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.yarn.ApplicationMaster (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/yarn/class-use/ClusterProperties.html b/releases/2.9.1/javadoc/org/apache/ignite/yarn/class-use/ClusterProperties.html
index 0172740..0f5d4f1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/yarn/class-use/ClusterProperties.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/yarn/class-use/ClusterProperties.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/yarn/class-use/ClusterProperties.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.yarn.ClusterProperties (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/yarn/class-use/IgniteContainer.html b/releases/2.9.1/javadoc/org/apache/ignite/yarn/class-use/IgniteContainer.html
index eaeddc8..263ba45 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/yarn/class-use/IgniteContainer.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/yarn/class-use/IgniteContainer.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/yarn/class-use/IgniteContainer.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.yarn.IgniteContainer (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/yarn/class-use/IgniteProvider.html b/releases/2.9.1/javadoc/org/apache/ignite/yarn/class-use/IgniteProvider.html
index 38f0436..0b4e1f1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/yarn/class-use/IgniteProvider.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/yarn/class-use/IgniteProvider.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/yarn/class-use/IgniteProvider.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.yarn.IgniteProvider (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/yarn/class-use/IgniteYarnClient.html b/releases/2.9.1/javadoc/org/apache/ignite/yarn/class-use/IgniteYarnClient.html
index 8770f64..15f4d33 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/yarn/class-use/IgniteYarnClient.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/yarn/class-use/IgniteYarnClient.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/yarn/class-use/IgniteYarnClient.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.yarn.IgniteYarnClient (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/yarn/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/yarn/package-frame.html
index f2853ee..ca539b5 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/yarn/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/yarn/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/yarn/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.yarn (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/yarn/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/yarn/package-summary.html
index 5327847..3cdc4b3 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/yarn/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/yarn/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/yarn/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.yarn (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/yarn/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/yarn/package-tree.html
index 47487a2..4651039 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/yarn/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/yarn/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/yarn/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.yarn Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/yarn/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/yarn/package-use.html
index a1cbf23..a3befed 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/yarn/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/yarn/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/yarn/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.yarn (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/yarn/utils/IgniteYarnUtils.html b/releases/2.9.1/javadoc/org/apache/ignite/yarn/utils/IgniteYarnUtils.html
index 28e1ff9..5e3ee1a 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/yarn/utils/IgniteYarnUtils.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/yarn/utils/IgniteYarnUtils.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/yarn/utils/IgniteYarnUtils.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:10 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>IgniteYarnUtils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/yarn/utils/class-use/IgniteYarnUtils.html b/releases/2.9.1/javadoc/org/apache/ignite/yarn/utils/class-use/IgniteYarnUtils.html
index b573601..1feb12e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/yarn/utils/class-use/IgniteYarnUtils.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/yarn/utils/class-use/IgniteYarnUtils.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/yarn/utils/class-use/IgniteYarnUtils.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:14 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Class org.apache.ignite.yarn.utils.IgniteYarnUtils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/yarn/utils/package-frame.html b/releases/2.9.1/javadoc/org/apache/ignite/yarn/utils/package-frame.html
index 3e8b327..0191ee1 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/yarn/utils/package-frame.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/yarn/utils/package-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/yarn/utils/package-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.yarn.utils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/yarn/utils/package-summary.html b/releases/2.9.1/javadoc/org/apache/ignite/yarn/utils/package-summary.html
index db30f98..23e955e 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/yarn/utils/package-summary.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/yarn/utils/package-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/yarn/utils/package-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.yarn.utils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/yarn/utils/package-tree.html b/releases/2.9.1/javadoc/org/apache/ignite/yarn/utils/package-tree.html
index 9e26e84..7005e69 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/yarn/utils/package-tree.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/yarn/utils/package-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/yarn/utils/package-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>org.apache.ignite.yarn.utils Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/org/apache/ignite/yarn/utils/package-use.html b/releases/2.9.1/javadoc/org/apache/ignite/yarn/utils/package-use.html
index a4447cf..82dd7e8 100644
--- a/releases/2.9.1/javadoc/org/apache/ignite/yarn/utils/package-use.html
+++ b/releases/2.9.1/javadoc/org/apache/ignite/yarn/utils/package-use.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/yarn/utils/package-use.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Uses of Package org.apache.ignite.yarn.utils (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/overview-frame.html b/releases/2.9.1/javadoc/overview-frame.html
index b5b2474..f3af5a8 100644
--- a/releases/2.9.1/javadoc/overview-frame.html
+++ b/releases/2.9.1/javadoc/overview-frame.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/overview-frame.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:12 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Overview List (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/overview-summary.html b/releases/2.9.1/javadoc/overview-summary.html
index 234477b..78f2469 100644
--- a/releases/2.9.1/javadoc/overview-summary.html
+++ b/releases/2.9.1/javadoc/overview-summary.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/overview-summary.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:16 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Overview (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/overview-tree.html b/releases/2.9.1/javadoc/overview-tree.html
index 45e7586..d12a133 100644
--- a/releases/2.9.1/javadoc/overview-tree.html
+++ b/releases/2.9.1/javadoc/overview-tree.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/overview-tree.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:15 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Class Hierarchy (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/javadoc/serialized-form.html b/releases/2.9.1/javadoc/serialized-form.html
index 7b6e3b6..1b8f66e 100644
--- a/releases/2.9.1/javadoc/serialized-form.html
+++ b/releases/2.9.1/javadoc/serialized-form.html
@@ -2,7 +2,32 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/javadoc/serialized-form.html" />
+
 <!-- Generated by javadoc (1.8.0_261) on Wed Dec 09 14:33:13 MSK 2020 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Serialized Form (Ignite 2.9.1)</title>
diff --git a/releases/2.9.1/release_notes.html b/releases/2.9.1/release_notes.html
index ab3ed53..0f1ab4f 100644
--- a/releases/2.9.1/release_notes.html
+++ b/releases/2.9.1/release_notes.html
@@ -1,6 +1,31 @@
 <head>
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
 <link rel="canonical" href="https://ignite.apache.org/releases/latest/release_notes.html" />
 
+
 	<style>h1 {    color: #113847;    font-size: 33px;    font-weight: bold;    margin: 30px 0 15px 0;    padding-bottom: 7px;    width: 700px;}h2 {  border-bottom: 2px solid #ccc;     color: #113847;     font-size: 29px;     font-weight: normal;     margin: 30px 0 15px 0;     padding-bottom: 7px;  width: 700px; }a {      color: #cc0000;      text-decoration: none;  }span {    color: #cc0000;}a:hover {    text-decoration: underline;}ul,ol {    list-style: disc;    margin-left: 30px;}ul li,ol li {    margin: 5px 0;}p.description {    width: 700px;}</style>
 
 	<script>
diff --git a/releases/2.9.1/scaladoc/index.html b/releases/2.9.1/scaladoc/index.html
index b760c06..5f04638 100644
--- a/releases/2.9.1/scaladoc/index.html
+++ b/releases/2.9.1/scaladoc/index.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/index.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/index.html" />
+
           <title>Ignite Scalar</title>
           <meta name="description" content="Ignite Scalar" />
           <meta name="keywords" content="Ignite Scalar" />
diff --git a/releases/2.9.1/scaladoc/index/index-_.html b/releases/2.9.1/scaladoc/index/index-_.html
index 84e97cd..cf36954 100644
--- a/releases/2.9.1/scaladoc/index/index-_.html
+++ b/releases/2.9.1/scaladoc/index/index-_.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/index/index-_.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/index/index-_.html" />
+
           <title>Ignite Scalar</title>
           <meta name="description" content="Ignite Scalar" />
           <meta name="keywords" content="Ignite Scalar" />
diff --git a/releases/2.9.1/scaladoc/index/index-a.html b/releases/2.9.1/scaladoc/index/index-a.html
index b6c4914..1999ecd 100644
--- a/releases/2.9.1/scaladoc/index/index-a.html
+++ b/releases/2.9.1/scaladoc/index/index-a.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/index/index-a.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/index/index-a.html" />
+
           <title>Ignite Scalar</title>
           <meta name="description" content="Ignite Scalar" />
           <meta name="keywords" content="Ignite Scalar" />
diff --git a/releases/2.9.1/scaladoc/index/index-b.html b/releases/2.9.1/scaladoc/index/index-b.html
index f18dc95..b393eff 100644
--- a/releases/2.9.1/scaladoc/index/index-b.html
+++ b/releases/2.9.1/scaladoc/index/index-b.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/index/index-b.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/index/index-b.html" />
+
           <title>Ignite Scalar</title>
           <meta name="description" content="Ignite Scalar" />
           <meta name="keywords" content="Ignite Scalar" />
diff --git a/releases/2.9.1/scaladoc/index/index-c.html b/releases/2.9.1/scaladoc/index/index-c.html
index c1a2691..834d95a 100644
--- a/releases/2.9.1/scaladoc/index/index-c.html
+++ b/releases/2.9.1/scaladoc/index/index-c.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/index/index-c.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/index/index-c.html" />
+
           <title>Ignite Scalar</title>
           <meta name="description" content="Ignite Scalar" />
           <meta name="keywords" content="Ignite Scalar" />
diff --git a/releases/2.9.1/scaladoc/index/index-d.html b/releases/2.9.1/scaladoc/index/index-d.html
index 77d04bb..6ffa23b 100644
--- a/releases/2.9.1/scaladoc/index/index-d.html
+++ b/releases/2.9.1/scaladoc/index/index-d.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/index/index-d.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/index/index-d.html" />
+
           <title>Ignite Scalar</title>
           <meta name="description" content="Ignite Scalar" />
           <meta name="keywords" content="Ignite Scalar" />
diff --git a/releases/2.9.1/scaladoc/index/index-e.html b/releases/2.9.1/scaladoc/index/index-e.html
index 6aa0913..9cf0030 100644
--- a/releases/2.9.1/scaladoc/index/index-e.html
+++ b/releases/2.9.1/scaladoc/index/index-e.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/index/index-e.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/index/index-e.html" />
+
           <title>Ignite Scalar</title>
           <meta name="description" content="Ignite Scalar" />
           <meta name="keywords" content="Ignite Scalar" />
diff --git a/releases/2.9.1/scaladoc/index/index-f.html b/releases/2.9.1/scaladoc/index/index-f.html
index e8158cf..dc7b46a 100644
--- a/releases/2.9.1/scaladoc/index/index-f.html
+++ b/releases/2.9.1/scaladoc/index/index-f.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/index/index-f.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/index/index-f.html" />
+
           <title>Ignite Scalar</title>
           <meta name="description" content="Ignite Scalar" />
           <meta name="keywords" content="Ignite Scalar" />
diff --git a/releases/2.9.1/scaladoc/index/index-g.html b/releases/2.9.1/scaladoc/index/index-g.html
index 32f93bf..ac96e8e 100644
--- a/releases/2.9.1/scaladoc/index/index-g.html
+++ b/releases/2.9.1/scaladoc/index/index-g.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/index/index-g.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/index/index-g.html" />
+
           <title>Ignite Scalar</title>
           <meta name="description" content="Ignite Scalar" />
           <meta name="keywords" content="Ignite Scalar" />
diff --git a/releases/2.9.1/scaladoc/index/index-i.html b/releases/2.9.1/scaladoc/index/index-i.html
index d595888..dda7993 100644
--- a/releases/2.9.1/scaladoc/index/index-i.html
+++ b/releases/2.9.1/scaladoc/index/index-i.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/index/index-i.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/index/index-i.html" />
+
           <title>Ignite Scalar</title>
           <meta name="description" content="Ignite Scalar" />
           <meta name="keywords" content="Ignite Scalar" />
diff --git a/releases/2.9.1/scaladoc/index/index-k.html b/releases/2.9.1/scaladoc/index/index-k.html
index 6c2cc95..ea8877e 100644
--- a/releases/2.9.1/scaladoc/index/index-k.html
+++ b/releases/2.9.1/scaladoc/index/index-k.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/index/index-k.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/index/index-k.html" />
+
           <title>Ignite Scalar</title>
           <meta name="description" content="Ignite Scalar" />
           <meta name="keywords" content="Ignite Scalar" />
diff --git a/releases/2.9.1/scaladoc/index/index-l.html b/releases/2.9.1/scaladoc/index/index-l.html
index d12372c..b014279 100644
--- a/releases/2.9.1/scaladoc/index/index-l.html
+++ b/releases/2.9.1/scaladoc/index/index-l.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/index/index-l.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/index/index-l.html" />
+
           <title>Ignite Scalar</title>
           <meta name="description" content="Ignite Scalar" />
           <meta name="keywords" content="Ignite Scalar" />
diff --git a/releases/2.9.1/scaladoc/index/index-n.html b/releases/2.9.1/scaladoc/index/index-n.html
index 79b9493..641d6bd 100644
--- a/releases/2.9.1/scaladoc/index/index-n.html
+++ b/releases/2.9.1/scaladoc/index/index-n.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/index/index-n.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/index/index-n.html" />
+
           <title>Ignite Scalar</title>
           <meta name="description" content="Ignite Scalar" />
           <meta name="keywords" content="Ignite Scalar" />
diff --git a/releases/2.9.1/scaladoc/index/index-o.html b/releases/2.9.1/scaladoc/index/index-o.html
index 07d4c08..19b5b0b 100644
--- a/releases/2.9.1/scaladoc/index/index-o.html
+++ b/releases/2.9.1/scaladoc/index/index-o.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/index/index-o.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/index/index-o.html" />
+
           <title>Ignite Scalar</title>
           <meta name="description" content="Ignite Scalar" />
           <meta name="keywords" content="Ignite Scalar" />
diff --git a/releases/2.9.1/scaladoc/index/index-p.html b/releases/2.9.1/scaladoc/index/index-p.html
index 586973d..81c3b07 100644
--- a/releases/2.9.1/scaladoc/index/index-p.html
+++ b/releases/2.9.1/scaladoc/index/index-p.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/index/index-p.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/index/index-p.html" />
+
           <title>Ignite Scalar</title>
           <meta name="description" content="Ignite Scalar" />
           <meta name="keywords" content="Ignite Scalar" />
diff --git a/releases/2.9.1/scaladoc/index/index-r.html b/releases/2.9.1/scaladoc/index/index-r.html
index 57747c4..562c624 100644
--- a/releases/2.9.1/scaladoc/index/index-r.html
+++ b/releases/2.9.1/scaladoc/index/index-r.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/index/index-r.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/index/index-r.html" />
+
           <title>Ignite Scalar</title>
           <meta name="description" content="Ignite Scalar" />
           <meta name="keywords" content="Ignite Scalar" />
diff --git a/releases/2.9.1/scaladoc/index/index-s.html b/releases/2.9.1/scaladoc/index/index-s.html
index 79cbfab..6c84e75 100644
--- a/releases/2.9.1/scaladoc/index/index-s.html
+++ b/releases/2.9.1/scaladoc/index/index-s.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/index/index-s.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/index/index-s.html" />
+
           <title>Ignite Scalar</title>
           <meta name="description" content="Ignite Scalar" />
           <meta name="keywords" content="Ignite Scalar" />
diff --git a/releases/2.9.1/scaladoc/index/index-t.html b/releases/2.9.1/scaladoc/index/index-t.html
index 5220ef4..b7c033c 100644
--- a/releases/2.9.1/scaladoc/index/index-t.html
+++ b/releases/2.9.1/scaladoc/index/index-t.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/index/index-t.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/index/index-t.html" />
+
           <title>Ignite Scalar</title>
           <meta name="description" content="Ignite Scalar" />
           <meta name="keywords" content="Ignite Scalar" />
diff --git a/releases/2.9.1/scaladoc/index/index-u.html b/releases/2.9.1/scaladoc/index/index-u.html
index 0122c4e..5ca19ab 100644
--- a/releases/2.9.1/scaladoc/index/index-u.html
+++ b/releases/2.9.1/scaladoc/index/index-u.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/index/index-u.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/index/index-u.html" />
+
           <title>Ignite Scalar</title>
           <meta name="description" content="Ignite Scalar" />
           <meta name="keywords" content="Ignite Scalar" />
diff --git a/releases/2.9.1/scaladoc/index/index-v.html b/releases/2.9.1/scaladoc/index/index-v.html
index 170c81f..d05222a 100644
--- a/releases/2.9.1/scaladoc/index/index-v.html
+++ b/releases/2.9.1/scaladoc/index/index-v.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/index/index-v.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/index/index-v.html" />
+
           <title>Ignite Scalar</title>
           <meta name="description" content="Ignite Scalar" />
           <meta name="keywords" content="Ignite Scalar" />
diff --git a/releases/2.9.1/scaladoc/index/index-w.html b/releases/2.9.1/scaladoc/index/index-w.html
index 64e631d..14b0f73 100644
--- a/releases/2.9.1/scaladoc/index/index-w.html
+++ b/releases/2.9.1/scaladoc/index/index-w.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/index/index-w.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/index/index-w.html" />
+
           <title>Ignite Scalar</title>
           <meta name="description" content="Ignite Scalar" />
           <meta name="keywords" content="Ignite Scalar" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/package.html b/releases/2.9.1/scaladoc/org/apache/ignite/package.html
index 6471058..97d7305 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/package.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/package.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/package.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/package.html" />
+
           <title>ignite - Ignite Scalar - org.apache.ignite</title>
           <meta name="description" content="ignite - Ignite Scalar - org.apache.ignite" />
           <meta name="keywords" content="ignite Ignite Scalar org.apache.ignite" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/ScalarConversions.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/ScalarConversions.html
index e870c9b..5d3d3ba 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/ScalarConversions.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/ScalarConversions.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/ScalarConversions.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/ScalarConversions.html" />
+
           <title>ScalarConversions - Ignite Scalar - org.apache.ignite.scalar.ScalarConversions</title>
           <meta name="description" content="ScalarConversions - Ignite Scalar - org.apache.ignite.scalar.ScalarConversions" />
           <meta name="keywords" content="ScalarConversions Ignite Scalar org.apache.ignite.scalar.ScalarConversions" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsClosure.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsClosure.html
index 07b98ed..46c5355 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsClosure.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsClosure.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarAbsClosure.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsClosure.html" />
+
           <title>ScalarAbsClosure - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarAbsClosure</title>
           <meta name="description" content="ScalarAbsClosure - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarAbsClosure" />
           <meta name="keywords" content="ScalarAbsClosure Ignite Scalar org.apache.ignite.scalar.lang.ScalarAbsClosure" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsClosureFunction.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsClosureFunction.html
index 9d05db5..73e2b06 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsClosureFunction.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsClosureFunction.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarAbsClosureFunction.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsClosureFunction.html" />
+
           <title>ScalarAbsClosureFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarAbsClosureFunction</title>
           <meta name="description" content="ScalarAbsClosureFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarAbsClosureFunction" />
           <meta name="keywords" content="ScalarAbsClosureFunction Ignite Scalar org.apache.ignite.scalar.lang.ScalarAbsClosureFunction" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsClosureX.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsClosureX.html
index 5bdf9a1..12263d4 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsClosureX.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsClosureX.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarAbsClosureX.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsClosureX.html" />
+
           <title>ScalarAbsClosureX - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarAbsClosureX</title>
           <meta name="description" content="ScalarAbsClosureX - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarAbsClosureX" />
           <meta name="keywords" content="ScalarAbsClosureX Ignite Scalar org.apache.ignite.scalar.lang.ScalarAbsClosureX" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsClosureXFunction.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsClosureXFunction.html
index 5b88e64..9d5c5ef 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsClosureXFunction.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsClosureXFunction.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarAbsClosureXFunction.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsClosureXFunction.html" />
+
           <title>ScalarAbsClosureXFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarAbsClosureXFunction</title>
           <meta name="description" content="ScalarAbsClosureXFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarAbsClosureXFunction" />
           <meta name="keywords" content="ScalarAbsClosureXFunction Ignite Scalar org.apache.ignite.scalar.lang.ScalarAbsClosureXFunction" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsPredicate.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsPredicate.html
index b36258b..e15bbce 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsPredicate.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsPredicate.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarAbsPredicate.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsPredicate.html" />
+
           <title>ScalarAbsPredicate - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarAbsPredicate</title>
           <meta name="description" content="ScalarAbsPredicate - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarAbsPredicate" />
           <meta name="keywords" content="ScalarAbsPredicate Ignite Scalar org.apache.ignite.scalar.lang.ScalarAbsPredicate" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsPredicateFunction.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsPredicateFunction.html
index e6f30db..989e921 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsPredicateFunction.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsPredicateFunction.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarAbsPredicateFunction.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsPredicateFunction.html" />
+
           <title>ScalarAbsPredicateFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarAbsPredicateFunction</title>
           <meta name="description" content="ScalarAbsPredicateFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarAbsPredicateFunction" />
           <meta name="keywords" content="ScalarAbsPredicateFunction Ignite Scalar org.apache.ignite.scalar.lang.ScalarAbsPredicateFunction" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsPredicateX.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsPredicateX.html
index 36e1e48..6207913 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsPredicateX.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsPredicateX.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarAbsPredicateX.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsPredicateX.html" />
+
           <title>ScalarAbsPredicateX - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarAbsPredicateX</title>
           <meta name="description" content="ScalarAbsPredicateX - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarAbsPredicateX" />
           <meta name="keywords" content="ScalarAbsPredicateX Ignite Scalar org.apache.ignite.scalar.lang.ScalarAbsPredicateX" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsPredicateXFunction.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsPredicateXFunction.html
index e2e60c1..fddfd7a 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsPredicateXFunction.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsPredicateXFunction.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarAbsPredicateXFunction.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarAbsPredicateXFunction.html" />
+
           <title>ScalarAbsPredicateXFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarAbsPredicateXFunction</title>
           <meta name="description" content="ScalarAbsPredicateXFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarAbsPredicateXFunction" />
           <meta name="keywords" content="ScalarAbsPredicateXFunction Ignite Scalar org.apache.ignite.scalar.lang.ScalarAbsPredicateXFunction" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure.html
index 0ebe3b7..05ed5e9 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarClosure.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure.html" />
+
           <title>ScalarClosure - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarClosure</title>
           <meta name="description" content="ScalarClosure - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarClosure" />
           <meta name="keywords" content="ScalarClosure Ignite Scalar org.apache.ignite.scalar.lang.ScalarClosure" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure2.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure2.html
index 6524761..faaa00d 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure2.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure2.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarClosure2.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure2.html" />
+
           <title>ScalarClosure2 - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarClosure2</title>
           <meta name="description" content="ScalarClosure2 - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarClosure2" />
           <meta name="keywords" content="ScalarClosure2 Ignite Scalar org.apache.ignite.scalar.lang.ScalarClosure2" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure2Function.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure2Function.html
index c9d4d97..e05cc1b 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure2Function.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure2Function.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarClosure2Function.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure2Function.html" />
+
           <title>ScalarClosure2Function - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarClosure2Function</title>
           <meta name="description" content="ScalarClosure2Function - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarClosure2Function" />
           <meta name="keywords" content="ScalarClosure2Function Ignite Scalar org.apache.ignite.scalar.lang.ScalarClosure2Function" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure2X.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure2X.html
index 441bd46..3a9c9d4 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure2X.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure2X.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarClosure2X.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure2X.html" />
+
           <title>ScalarClosure2X - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarClosure2X</title>
           <meta name="description" content="ScalarClosure2X - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarClosure2X" />
           <meta name="keywords" content="ScalarClosure2X Ignite Scalar org.apache.ignite.scalar.lang.ScalarClosure2X" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure2XFunction.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure2XFunction.html
index bddc766..1d78459 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure2XFunction.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure2XFunction.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarClosure2XFunction.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure2XFunction.html" />
+
           <title>ScalarClosure2XFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarClosure2XFunction</title>
           <meta name="description" content="ScalarClosure2XFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarClosure2XFunction" />
           <meta name="keywords" content="ScalarClosure2XFunction Ignite Scalar org.apache.ignite.scalar.lang.ScalarClosure2XFunction" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure3.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure3.html
index de5bb73..2b5a8a1 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure3.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure3.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarClosure3.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure3.html" />
+
           <title>ScalarClosure3 - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarClosure3</title>
           <meta name="description" content="ScalarClosure3 - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarClosure3" />
           <meta name="keywords" content="ScalarClosure3 Ignite Scalar org.apache.ignite.scalar.lang.ScalarClosure3" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure3Function.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure3Function.html
index 4a3336e..eb0128b 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure3Function.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure3Function.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarClosure3Function.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure3Function.html" />
+
           <title>ScalarClosure3Function - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarClosure3Function</title>
           <meta name="description" content="ScalarClosure3Function - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarClosure3Function" />
           <meta name="keywords" content="ScalarClosure3Function Ignite Scalar org.apache.ignite.scalar.lang.ScalarClosure3Function" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure3X.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure3X.html
index 86ad48a..f3b2402 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure3X.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure3X.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarClosure3X.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure3X.html" />
+
           <title>ScalarClosure3X - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarClosure3X</title>
           <meta name="description" content="ScalarClosure3X - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarClosure3X" />
           <meta name="keywords" content="ScalarClosure3X Ignite Scalar org.apache.ignite.scalar.lang.ScalarClosure3X" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure3XFunction.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure3XFunction.html
index 17558a4..973b283 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure3XFunction.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure3XFunction.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarClosure3XFunction.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarClosure3XFunction.html" />
+
           <title>ScalarClosure3XFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarClosure3XFunction</title>
           <meta name="description" content="ScalarClosure3XFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarClosure3XFunction" />
           <meta name="keywords" content="ScalarClosure3XFunction Ignite Scalar org.apache.ignite.scalar.lang.ScalarClosure3XFunction" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosureFunction.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosureFunction.html
index 734b494..97f5536 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosureFunction.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosureFunction.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarClosureFunction.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarClosureFunction.html" />
+
           <title>ScalarClosureFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarClosureFunction</title>
           <meta name="description" content="ScalarClosureFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarClosureFunction" />
           <meta name="keywords" content="ScalarClosureFunction Ignite Scalar org.apache.ignite.scalar.lang.ScalarClosureFunction" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosureX.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosureX.html
index c4388c3..d7f835f 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosureX.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosureX.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarClosureX.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarClosureX.html" />
+
           <title>ScalarClosureX - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarClosureX</title>
           <meta name="description" content="ScalarClosureX - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarClosureX" />
           <meta name="keywords" content="ScalarClosureX Ignite Scalar org.apache.ignite.scalar.lang.ScalarClosureX" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosureXFunction.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosureXFunction.html
index 8652860..eea5859 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosureXFunction.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarClosureXFunction.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarClosureXFunction.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarClosureXFunction.html" />
+
           <title>ScalarClosureXFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarClosureXFunction</title>
           <meta name="description" content="ScalarClosureXFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarClosureXFunction" />
           <meta name="keywords" content="ScalarClosureXFunction Ignite Scalar org.apache.ignite.scalar.lang.ScalarClosureXFunction" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure.html
index 60cd39b..34689b3 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarInClosure.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure.html" />
+
           <title>ScalarInClosure - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarInClosure</title>
           <meta name="description" content="ScalarInClosure - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarInClosure" />
           <meta name="keywords" content="ScalarInClosure Ignite Scalar org.apache.ignite.scalar.lang.ScalarInClosure" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure2.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure2.html
index 2621d03..f2af9fb 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure2.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure2.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarInClosure2.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure2.html" />
+
           <title>ScalarInClosure2 - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarInClosure2</title>
           <meta name="description" content="ScalarInClosure2 - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarInClosure2" />
           <meta name="keywords" content="ScalarInClosure2 Ignite Scalar org.apache.ignite.scalar.lang.ScalarInClosure2" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure2Function.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure2Function.html
index d6705e2..2bd7a11 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure2Function.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure2Function.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarInClosure2Function.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure2Function.html" />
+
           <title>ScalarInClosure2Function - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarInClosure2Function</title>
           <meta name="description" content="ScalarInClosure2Function - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarInClosure2Function" />
           <meta name="keywords" content="ScalarInClosure2Function Ignite Scalar org.apache.ignite.scalar.lang.ScalarInClosure2Function" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure2X.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure2X.html
index e1b17d3..b314495 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure2X.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure2X.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarInClosure2X.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure2X.html" />
+
           <title>ScalarInClosure2X - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarInClosure2X</title>
           <meta name="description" content="ScalarInClosure2X - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarInClosure2X" />
           <meta name="keywords" content="ScalarInClosure2X Ignite Scalar org.apache.ignite.scalar.lang.ScalarInClosure2X" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure2XFunction.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure2XFunction.html
index c55f8e7..2217fd7 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure2XFunction.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure2XFunction.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarInClosure2XFunction.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure2XFunction.html" />
+
           <title>ScalarInClosure2XFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarInClosure2XFunction</title>
           <meta name="description" content="ScalarInClosure2XFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarInClosure2XFunction" />
           <meta name="keywords" content="ScalarInClosure2XFunction Ignite Scalar org.apache.ignite.scalar.lang.ScalarInClosure2XFunction" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure3.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure3.html
index b5a0136..09cc208 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure3.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure3.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarInClosure3.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure3.html" />
+
           <title>ScalarInClosure3 - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarInClosure3</title>
           <meta name="description" content="ScalarInClosure3 - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarInClosure3" />
           <meta name="keywords" content="ScalarInClosure3 Ignite Scalar org.apache.ignite.scalar.lang.ScalarInClosure3" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure3Function.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure3Function.html
index 1f37180..f9315b4 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure3Function.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure3Function.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarInClosure3Function.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure3Function.html" />
+
           <title>ScalarInClosure3Function - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarInClosure3Function</title>
           <meta name="description" content="ScalarInClosure3Function - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarInClosure3Function" />
           <meta name="keywords" content="ScalarInClosure3Function Ignite Scalar org.apache.ignite.scalar.lang.ScalarInClosure3Function" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure3X.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure3X.html
index 0465406..56f04a7 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure3X.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure3X.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarInClosure3X.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure3X.html" />
+
           <title>ScalarInClosure3X - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarInClosure3X</title>
           <meta name="description" content="ScalarInClosure3X - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarInClosure3X" />
           <meta name="keywords" content="ScalarInClosure3X Ignite Scalar org.apache.ignite.scalar.lang.ScalarInClosure3X" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure3XFunction.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure3XFunction.html
index 7a1d83e..56d7ebf 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure3XFunction.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure3XFunction.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarInClosure3XFunction.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosure3XFunction.html" />
+
           <title>ScalarInClosure3XFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarInClosure3XFunction</title>
           <meta name="description" content="ScalarInClosure3XFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarInClosure3XFunction" />
           <meta name="keywords" content="ScalarInClosure3XFunction Ignite Scalar org.apache.ignite.scalar.lang.ScalarInClosure3XFunction" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosureFunction.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosureFunction.html
index ef928b6..56cb742 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosureFunction.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosureFunction.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarInClosureFunction.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosureFunction.html" />
+
           <title>ScalarInClosureFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarInClosureFunction</title>
           <meta name="description" content="ScalarInClosureFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarInClosureFunction" />
           <meta name="keywords" content="ScalarInClosureFunction Ignite Scalar org.apache.ignite.scalar.lang.ScalarInClosureFunction" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosureX.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosureX.html
index 60facba..e98141c 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosureX.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosureX.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarInClosureX.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosureX.html" />
+
           <title>ScalarInClosureX - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarInClosureX</title>
           <meta name="description" content="ScalarInClosureX - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarInClosureX" />
           <meta name="keywords" content="ScalarInClosureX Ignite Scalar org.apache.ignite.scalar.lang.ScalarInClosureX" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosureXFunction.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosureXFunction.html
index 5855685..bf2b4f4 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosureXFunction.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosureXFunction.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarInClosureXFunction.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarInClosureXFunction.html" />
+
           <title>ScalarInClosureXFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarInClosureXFunction</title>
           <meta name="description" content="ScalarInClosureXFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarInClosureXFunction" />
           <meta name="keywords" content="ScalarInClosureXFunction Ignite Scalar org.apache.ignite.scalar.lang.ScalarInClosureXFunction" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarJob.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarJob.html
index 4632c5e..3802464 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarJob.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarJob.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarJob.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarJob.html" />
+
           <title>ScalarJob - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarJob</title>
           <meta name="description" content="ScalarJob - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarJob" />
           <meta name="keywords" content="ScalarJob Ignite Scalar org.apache.ignite.scalar.lang.ScalarJob" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarOutClosure.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarOutClosure.html
index 4b69b65..5b6ef42 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarOutClosure.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarOutClosure.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarOutClosure.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarOutClosure.html" />
+
           <title>ScalarOutClosure - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarOutClosure</title>
           <meta name="description" content="ScalarOutClosure - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarOutClosure" />
           <meta name="keywords" content="ScalarOutClosure Ignite Scalar org.apache.ignite.scalar.lang.ScalarOutClosure" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarOutClosureFunction.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarOutClosureFunction.html
index 051abb0..ac746c8 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarOutClosureFunction.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarOutClosureFunction.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarOutClosureFunction.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarOutClosureFunction.html" />
+
           <title>ScalarOutClosureFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarOutClosureFunction</title>
           <meta name="description" content="ScalarOutClosureFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarOutClosureFunction" />
           <meta name="keywords" content="ScalarOutClosureFunction Ignite Scalar org.apache.ignite.scalar.lang.ScalarOutClosureFunction" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarOutClosureX.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarOutClosureX.html
index 9e75ded..dd0ccd8 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarOutClosureX.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarOutClosureX.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarOutClosureX.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarOutClosureX.html" />
+
           <title>ScalarOutClosureX - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarOutClosureX</title>
           <meta name="description" content="ScalarOutClosureX - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarOutClosureX" />
           <meta name="keywords" content="ScalarOutClosureX Ignite Scalar org.apache.ignite.scalar.lang.ScalarOutClosureX" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarOutClosureXFunction.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarOutClosureXFunction.html
index 292fe75..9b72fc5 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarOutClosureXFunction.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarOutClosureXFunction.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarOutClosureXFunction.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarOutClosureXFunction.html" />
+
           <title>ScalarOutClosureXFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarOutClosureXFunction</title>
           <meta name="description" content="ScalarOutClosureXFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarOutClosureXFunction" />
           <meta name="keywords" content="ScalarOutClosureXFunction Ignite Scalar org.apache.ignite.scalar.lang.ScalarOutClosureXFunction" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate.html
index 93e0bde..afd825c 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarPredicate.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate.html" />
+
           <title>ScalarPredicate - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarPredicate</title>
           <meta name="description" content="ScalarPredicate - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarPredicate" />
           <meta name="keywords" content="ScalarPredicate Ignite Scalar org.apache.ignite.scalar.lang.ScalarPredicate" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate2.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate2.html
index 103d417..780a2d6 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate2.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate2.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarPredicate2.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate2.html" />
+
           <title>ScalarPredicate2 - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarPredicate2</title>
           <meta name="description" content="ScalarPredicate2 - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarPredicate2" />
           <meta name="keywords" content="ScalarPredicate2 Ignite Scalar org.apache.ignite.scalar.lang.ScalarPredicate2" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate2Function.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate2Function.html
index fa9c4aa..843c290 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate2Function.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate2Function.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarPredicate2Function.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate2Function.html" />
+
           <title>ScalarPredicate2Function - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarPredicate2Function</title>
           <meta name="description" content="ScalarPredicate2Function - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarPredicate2Function" />
           <meta name="keywords" content="ScalarPredicate2Function Ignite Scalar org.apache.ignite.scalar.lang.ScalarPredicate2Function" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate2X.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate2X.html
index 1be1368..8400bc0 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate2X.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate2X.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarPredicate2X.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate2X.html" />
+
           <title>ScalarPredicate2X - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarPredicate2X</title>
           <meta name="description" content="ScalarPredicate2X - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarPredicate2X" />
           <meta name="keywords" content="ScalarPredicate2X Ignite Scalar org.apache.ignite.scalar.lang.ScalarPredicate2X" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate2XFunction.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate2XFunction.html
index 64e7698..24ad5be 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate2XFunction.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate2XFunction.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarPredicate2XFunction.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate2XFunction.html" />
+
           <title>ScalarPredicate2XFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarPredicate2XFunction</title>
           <meta name="description" content="ScalarPredicate2XFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarPredicate2XFunction" />
           <meta name="keywords" content="ScalarPredicate2XFunction Ignite Scalar org.apache.ignite.scalar.lang.ScalarPredicate2XFunction" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate3.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate3.html
index c309f9a..e3bd554 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate3.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate3.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarPredicate3.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate3.html" />
+
           <title>ScalarPredicate3 - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarPredicate3</title>
           <meta name="description" content="ScalarPredicate3 - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarPredicate3" />
           <meta name="keywords" content="ScalarPredicate3 Ignite Scalar org.apache.ignite.scalar.lang.ScalarPredicate3" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate3Function.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate3Function.html
index 73755a1..27fb17f 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate3Function.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate3Function.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarPredicate3Function.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate3Function.html" />
+
           <title>ScalarPredicate3Function - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarPredicate3Function</title>
           <meta name="description" content="ScalarPredicate3Function - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarPredicate3Function" />
           <meta name="keywords" content="ScalarPredicate3Function Ignite Scalar org.apache.ignite.scalar.lang.ScalarPredicate3Function" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate3X.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate3X.html
index 0781ec2..f8799ee 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate3X.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate3X.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarPredicate3X.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate3X.html" />
+
           <title>ScalarPredicate3X - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarPredicate3X</title>
           <meta name="description" content="ScalarPredicate3X - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarPredicate3X" />
           <meta name="keywords" content="ScalarPredicate3X Ignite Scalar org.apache.ignite.scalar.lang.ScalarPredicate3X" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate3XFunction.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate3XFunction.html
index 99ecae4..6fdd6a8 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate3XFunction.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate3XFunction.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarPredicate3XFunction.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicate3XFunction.html" />
+
           <title>ScalarPredicate3XFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarPredicate3XFunction</title>
           <meta name="description" content="ScalarPredicate3XFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarPredicate3XFunction" />
           <meta name="keywords" content="ScalarPredicate3XFunction Ignite Scalar org.apache.ignite.scalar.lang.ScalarPredicate3XFunction" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicateFunction.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicateFunction.html
index ccb4326..8093b6d 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicateFunction.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicateFunction.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarPredicateFunction.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicateFunction.html" />
+
           <title>ScalarPredicateFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarPredicateFunction</title>
           <meta name="description" content="ScalarPredicateFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarPredicateFunction" />
           <meta name="keywords" content="ScalarPredicateFunction Ignite Scalar org.apache.ignite.scalar.lang.ScalarPredicateFunction" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicateX.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicateX.html
index 12c3e41..618297a 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicateX.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicateX.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarPredicateX.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicateX.html" />
+
           <title>ScalarPredicateX - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarPredicateX</title>
           <meta name="description" content="ScalarPredicateX - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarPredicateX" />
           <meta name="keywords" content="ScalarPredicateX Ignite Scalar org.apache.ignite.scalar.lang.ScalarPredicateX" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicateXFunction.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicateXFunction.html
index 45e0eab..fe9aeca 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicateXFunction.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicateXFunction.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarPredicateXFunction.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarPredicateXFunction.html" />
+
           <title>ScalarPredicateXFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarPredicateXFunction</title>
           <meta name="description" content="ScalarPredicateXFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarPredicateXFunction" />
           <meta name="keywords" content="ScalarPredicateXFunction Ignite Scalar org.apache.ignite.scalar.lang.ScalarPredicateXFunction" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarReducer.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarReducer.html
index ac9f644..2e16574 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarReducer.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarReducer.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarReducer.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarReducer.html" />
+
           <title>ScalarReducer - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarReducer</title>
           <meta name="description" content="ScalarReducer - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarReducer" />
           <meta name="keywords" content="ScalarReducer Ignite Scalar org.apache.ignite.scalar.lang.ScalarReducer" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarReducer2.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarReducer2.html
index 1651da2..5922e10 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarReducer2.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarReducer2.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarReducer2.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarReducer2.html" />
+
           <title>ScalarReducer2 - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarReducer2</title>
           <meta name="description" content="ScalarReducer2 - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarReducer2" />
           <meta name="keywords" content="ScalarReducer2 Ignite Scalar org.apache.ignite.scalar.lang.ScalarReducer2" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarReducer2Function.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarReducer2Function.html
index d8ca24c..6cb2440 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarReducer2Function.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarReducer2Function.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarReducer2Function.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarReducer2Function.html" />
+
           <title>ScalarReducer2Function - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarReducer2Function</title>
           <meta name="description" content="ScalarReducer2Function - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarReducer2Function" />
           <meta name="keywords" content="ScalarReducer2Function Ignite Scalar org.apache.ignite.scalar.lang.ScalarReducer2Function" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarReducer3.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarReducer3.html
index 0d55c9b..3fa0467 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarReducer3.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarReducer3.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarReducer3.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarReducer3.html" />
+
           <title>ScalarReducer3 - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarReducer3</title>
           <meta name="description" content="ScalarReducer3 - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarReducer3" />
           <meta name="keywords" content="ScalarReducer3 Ignite Scalar org.apache.ignite.scalar.lang.ScalarReducer3" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarReducer3Function.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarReducer3Function.html
index 33d4fec..57ddb60 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarReducer3Function.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarReducer3Function.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarReducer3Function.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarReducer3Function.html" />
+
           <title>ScalarReducer3Function - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarReducer3Function</title>
           <meta name="description" content="ScalarReducer3Function - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarReducer3Function" />
           <meta name="keywords" content="ScalarReducer3Function Ignite Scalar org.apache.ignite.scalar.lang.ScalarReducer3Function" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarReducerFunction.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarReducerFunction.html
index 6b8d888..f323f94 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarReducerFunction.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/ScalarReducerFunction.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/ScalarReducerFunction.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/ScalarReducerFunction.html" />
+
           <title>ScalarReducerFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarReducerFunction</title>
           <meta name="description" content="ScalarReducerFunction - Ignite Scalar - org.apache.ignite.scalar.lang.ScalarReducerFunction" />
           <meta name="keywords" content="ScalarReducerFunction Ignite Scalar org.apache.ignite.scalar.lang.ScalarReducerFunction" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/package.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/package.html
index b7288fa..bd7f28e 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/package.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/lang/package.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/lang/package.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/lang/package.html" />
+
           <title>lang - Ignite Scalar - org.apache.ignite.scalar.lang</title>
           <meta name="description" content="lang - Ignite Scalar - org.apache.ignite.scalar.lang" />
           <meta name="keywords" content="lang Ignite Scalar org.apache.ignite.scalar.lang" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/package.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/package.html
index 1347418..0e1c4be 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/package.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/package.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/package.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/package.html" />
+
           <title>scalar - Ignite Scalar - org.apache.ignite.scalar</title>
           <meta name="description" content="scalar - Ignite Scalar - org.apache.ignite.scalar" />
           <meta name="keywords" content="scalar Ignite Scalar org.apache.ignite.scalar" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/PimpedType$.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/PimpedType$.html
index 22906b8..8a4f3e4 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/PimpedType$.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/PimpedType$.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/pimps/PimpedType$.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/pimps/PimpedType$.html" />
+
           <title>PimpedType - Ignite Scalar - org.apache.ignite.scalar.pimps.PimpedType</title>
           <meta name="description" content="PimpedType - Ignite Scalar - org.apache.ignite.scalar.pimps.PimpedType" />
           <meta name="keywords" content="PimpedType Ignite Scalar org.apache.ignite.scalar.pimps.PimpedType" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/PimpedType.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/PimpedType.html
index 29793a9..2255c21 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/PimpedType.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/PimpedType.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/pimps/PimpedType.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/pimps/PimpedType.html" />
+
           <title>PimpedType - Ignite Scalar - org.apache.ignite.scalar.pimps.PimpedType</title>
           <meta name="description" content="PimpedType - Ignite Scalar - org.apache.ignite.scalar.pimps.PimpedType" />
           <meta name="keywords" content="PimpedType Ignite Scalar org.apache.ignite.scalar.pimps.PimpedType" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/ScalarCachePimp$.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/ScalarCachePimp$.html
index e6632b6..af62e8f 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/ScalarCachePimp$.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/ScalarCachePimp$.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/pimps/ScalarCachePimp$.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/pimps/ScalarCachePimp$.html" />
+
           <title>ScalarCachePimp - Ignite Scalar - org.apache.ignite.scalar.pimps.ScalarCachePimp</title>
           <meta name="description" content="ScalarCachePimp - Ignite Scalar - org.apache.ignite.scalar.pimps.ScalarCachePimp" />
           <meta name="keywords" content="ScalarCachePimp Ignite Scalar org.apache.ignite.scalar.pimps.ScalarCachePimp" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/ScalarCachePimp.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/ScalarCachePimp.html
index f750008..3f8f654 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/ScalarCachePimp.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/ScalarCachePimp.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/pimps/ScalarCachePimp.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/pimps/ScalarCachePimp.html" />
+
           <title>ScalarCachePimp - Ignite Scalar - org.apache.ignite.scalar.pimps.ScalarCachePimp</title>
           <meta name="description" content="ScalarCachePimp - Ignite Scalar - org.apache.ignite.scalar.pimps.ScalarCachePimp" />
           <meta name="keywords" content="ScalarCachePimp Ignite Scalar org.apache.ignite.scalar.pimps.ScalarCachePimp" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/ScalarGridPimp$.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/ScalarGridPimp$.html
index ad06409..3546479 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/ScalarGridPimp$.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/ScalarGridPimp$.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/pimps/ScalarGridPimp$.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/pimps/ScalarGridPimp$.html" />
+
           <title>ScalarGridPimp - Ignite Scalar - org.apache.ignite.scalar.pimps.ScalarGridPimp</title>
           <meta name="description" content="ScalarGridPimp - Ignite Scalar - org.apache.ignite.scalar.pimps.ScalarGridPimp" />
           <meta name="keywords" content="ScalarGridPimp Ignite Scalar org.apache.ignite.scalar.pimps.ScalarGridPimp" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/ScalarGridPimp.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/ScalarGridPimp.html
index 35749be..2fc63c4 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/ScalarGridPimp.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/ScalarGridPimp.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/pimps/ScalarGridPimp.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/pimps/ScalarGridPimp.html" />
+
           <title>ScalarGridPimp - Ignite Scalar - org.apache.ignite.scalar.pimps.ScalarGridPimp</title>
           <meta name="description" content="ScalarGridPimp - Ignite Scalar - org.apache.ignite.scalar.pimps.ScalarGridPimp" />
           <meta name="keywords" content="ScalarGridPimp Ignite Scalar org.apache.ignite.scalar.pimps.ScalarGridPimp" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/ScalarProjectionPimp$.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/ScalarProjectionPimp$.html
index e9db378..a14b7b9 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/ScalarProjectionPimp$.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/ScalarProjectionPimp$.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/pimps/ScalarProjectionPimp$.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/pimps/ScalarProjectionPimp$.html" />
+
           <title>ScalarProjectionPimp - Ignite Scalar - org.apache.ignite.scalar.pimps.ScalarProjectionPimp</title>
           <meta name="description" content="ScalarProjectionPimp - Ignite Scalar - org.apache.ignite.scalar.pimps.ScalarProjectionPimp" />
           <meta name="keywords" content="ScalarProjectionPimp Ignite Scalar org.apache.ignite.scalar.pimps.ScalarProjectionPimp" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/ScalarProjectionPimp.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/ScalarProjectionPimp.html
index 60c9445..d2cbc97 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/ScalarProjectionPimp.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/ScalarProjectionPimp.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/pimps/ScalarProjectionPimp.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/pimps/ScalarProjectionPimp.html" />
+
           <title>ScalarProjectionPimp - Ignite Scalar - org.apache.ignite.scalar.pimps.ScalarProjectionPimp</title>
           <meta name="description" content="ScalarProjectionPimp - Ignite Scalar - org.apache.ignite.scalar.pimps.ScalarProjectionPimp" />
           <meta name="keywords" content="ScalarProjectionPimp Ignite Scalar org.apache.ignite.scalar.pimps.ScalarProjectionPimp" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/ScalarTaskThreadContext.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/ScalarTaskThreadContext.html
index 181502e..8d622ac 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/ScalarTaskThreadContext.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/ScalarTaskThreadContext.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/pimps/ScalarTaskThreadContext.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/pimps/ScalarTaskThreadContext.html" />
+
           <title>ScalarTaskThreadContext - Ignite Scalar - org.apache.ignite.scalar.pimps.ScalarTaskThreadContext</title>
           <meta name="description" content="ScalarTaskThreadContext - Ignite Scalar - org.apache.ignite.scalar.pimps.ScalarTaskThreadContext" />
           <meta name="keywords" content="ScalarTaskThreadContext Ignite Scalar org.apache.ignite.scalar.pimps.ScalarTaskThreadContext" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/package.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/package.html
index 2386229..99ca73b 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/package.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/pimps/package.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/pimps/package.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/pimps/package.html" />
+
           <title>pimps - Ignite Scalar - org.apache.ignite.scalar.pimps</title>
           <meta name="description" content="pimps - Ignite Scalar - org.apache.ignite.scalar.pimps" />
           <meta name="keywords" content="pimps Ignite Scalar org.apache.ignite.scalar.pimps" />
diff --git a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/scalar$.html b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/scalar$.html
index f56fc04..7051804 100644
--- a/releases/2.9.1/scaladoc/org/apache/ignite/scalar/scalar$.html
+++ b/releases/2.9.1/scaladoc/org/apache/ignite/scalar/scalar$.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/ignite/scalar/scalar$.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/ignite/scalar/scalar$.html" />
+
           <title>scalar - Ignite Scalar - org.apache.ignite.scalar.scalar</title>
           <meta name="description" content="scalar - Ignite Scalar - org.apache.ignite.scalar.scalar" />
           <meta name="keywords" content="scalar Ignite Scalar org.apache.ignite.scalar.scalar" />
diff --git a/releases/2.9.1/scaladoc/org/apache/package.html b/releases/2.9.1/scaladoc/org/apache/package.html
index 76416c6..f7196e2 100644
--- a/releases/2.9.1/scaladoc/org/apache/package.html
+++ b/releases/2.9.1/scaladoc/org/apache/package.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/apache/package.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/apache/package.html" />
+
           <title>apache - Ignite Scalar - org.apache</title>
           <meta name="description" content="apache - Ignite Scalar - org.apache" />
           <meta name="keywords" content="apache Ignite Scalar org.apache" />
diff --git a/releases/2.9.1/scaladoc/org/package.html b/releases/2.9.1/scaladoc/org/package.html
index 826b3c7..0877b42 100644
--- a/releases/2.9.1/scaladoc/org/package.html
+++ b/releases/2.9.1/scaladoc/org/package.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/org/package.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/org/package.html" />
+
           <title>org - Ignite Scalar - org</title>
           <meta name="description" content="org - Ignite Scalar - org" />
           <meta name="keywords" content="org Ignite Scalar org" />
diff --git a/releases/2.9.1/scaladoc/package.html b/releases/2.9.1/scaladoc/package.html
index fb9e66d..570e4d6 100644
--- a/releases/2.9.1/scaladoc/package.html
+++ b/releases/2.9.1/scaladoc/package.html
@@ -1,7 +1,32 @@
 <!DOCTYPE html >
 <html>
         <head>
-<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladocs/package.html" />
+<!-- Yandex.Metrika counter -->
+    <script type="text/javascript" >
+      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
+      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
+      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
+    
+      ym(72949126, "init", {
+           clickmap:true,
+           trackLinks:true,
+           accurateTrackBounce:true,
+           webvisor:true
+      });
+    </script>
+    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+    <!-- /Yandex.Metrika counter -->
+<script type='text/javascript'>
+    window.__lo_site_id = 284467;
+    
+      (function() {
+        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
+        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
+        })();
+      </script>
+<link rel="canonical" href="https://ignite.apache.org/releases/latest/scaladoc/package.html" />
+
           <title>root - Ignite Scalar - _root_</title>
           <meta name="description" content="root - Ignite Scalar - root " />
           <meta name="keywords" content="root Ignite Scalar root " />
