diff --git a/24.02/namespacemembers_func_d.html b/24.02/namespacemembers_func_d.html
new file mode 100644
index 0000000..9b9e6a4
--- /dev/null
+++ b/24.02/namespacemembers_func_d.html
@@ -0,0 +1,174 @@
+<!-- HTML header for doxygen 1.8.17-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.17"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Arm NN: Namespace Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="customdoxygen.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <img alt="ArmNN" src="Arm_NN_horizontal_blue.png" style="max-width: 15rem; margin-top: .5rem; margin-left 13px"/>
+  <td id="projectalign" style="padding-left: 0.9em;">
+   <div id="projectname">
+   &#160;<span id="projectnumber">24.02</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.17 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" style="-moz-user-select:none;" 
+       class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(document).ready(function(){initNavTree('namespacemembers_func_d.html',''); initResizable(); });
+/* @license-end */
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;
+
+<h3><a id="index_d"></a>- d -</h3><ul>
+<li>Debug()
+: <a class="el" href="namespacearmnn.html#a181ecb133401da6ff2916c192ca04d48">armnn</a>
+</li>
+<li>Debug&lt; BFloat16 &gt;()
+: <a class="el" href="namespacearmnn.html#acea0491173b09308ca626ea65e70e1d8">armnn</a>
+</li>
+<li>Debug&lt; float &gt;()
+: <a class="el" href="namespacearmnn.html#af34b15ddc0dcee095162820e88d84808">armnn</a>
+</li>
+<li>Debug&lt; Half &gt;()
+: <a class="el" href="namespacearmnn.html#a4dbfaabd2d65dc91bc8bd4d0b5e1ed07">armnn</a>
+</li>
+<li>Debug&lt; int16_t &gt;()
+: <a class="el" href="namespacearmnn.html#a62669f61a81677f5ca4b1f21bb7d45d8">armnn</a>
+</li>
+<li>Debug&lt; int32_t &gt;()
+: <a class="el" href="namespacearmnn.html#a77e5a9b94927bee9c48010efd2dec2b0">armnn</a>
+</li>
+<li>Debug&lt; int64_t &gt;()
+: <a class="el" href="namespacearmnn.html#a43a27d876cf8cab5f5d45163a05908e9">armnn</a>
+</li>
+<li>Debug&lt; int8_t &gt;()
+: <a class="el" href="namespacearmnn.html#a31a77914be2a7b9d8c6d22036df869d8">armnn</a>
+</li>
+<li>Debug&lt; uint8_t &gt;()
+: <a class="el" href="namespacearmnn.html#af5cd3e7fcb637ffad7644cdd2e19a8ae">armnn</a>
+</li>
+<li>DeleteAsType()
+: <a class="el" href="namespacearmnn.html#a7dacd5f6b52fd93bfd536976d27f8293">armnn</a>
+</li>
+<li>DepthToSpace()
+: <a class="el" href="namespacearmnn.html#ab023d9a7687e35c0f108458a094c1f56">armnn</a>
+</li>
+<li>Dequantize()
+: <a class="el" href="namespacearmnn.html#a855293b1be0581fb61ef6a1c5b027d0f">armnn</a>
+</li>
+<li>DequantizeAndMakeConstTensorPin()
+: <a class="el" href="namespacearmnn__driver.html#a37ca67c646393225921543233a873803">armnn_driver</a>
+</li>
+<li>DequantizeIfRequired()
+: <a class="el" href="namespacearmnn__driver.html#a78a9a9f196810df6bc4795568f275c75">armnn_driver</a>
+</li>
+<li>DetectionPostProcess()
+: <a class="el" href="namespacearmnn.html#ae76ce23fa9fc18e56448d52b37dd3f32">armnn</a>
+</li>
+<li>DoPrepare()
+: <a class="el" href="namespacearmnn_delegate.html#a2dead08e0fa94f6f7d6d42ce05dfb847">armnnDelegate</a>
+, <a class="el" href="namespacearmnn_opaque_delegate.html#aecf6d4ce6dbbcaadd3ca140f5eb6e249">armnnOpaqueDelegate</a>
+</li>
+<li>DumpJsonProfilingIfRequired()
+: <a class="el" href="namespacearmnn__driver.html#aa313ae79f70102e3451d45d3387c2e46">armnn_driver</a>
+</li>
+<li>DumpTensor()
+: <a class="el" href="namespacearmnn__driver.html#aa25bddb175983b2d3e0965440323d789">armnn_driver</a>
+</li>
+<li>DumpTensor&lt; armnn::ConstTensor &gt;()
+: <a class="el" href="namespacearmnn__driver.html#a46cd012184b5106f810f5b6ea75863c4">armnn_driver</a>
+</li>
+<li>DumpTensor&lt; armnn::Tensor &gt;()
+: <a class="el" href="namespacearmnn__driver.html#a533bbc27789ba037d6f6b75f58624567">armnn_driver</a>
+</li>
+<li>DynamicPointerCast()
+: <a class="el" href="namespacearmnn_1_1utility.html#acd97c478143c3351ee920ba02111bb35">armnn::utility</a>
+</li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Wed Feb 14 2024 16:36:26 for Arm NN by
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.17 </li>
+  </ul>
+</div>
+</body>
+</html>
