<!doctype html> <html lang="en" class="no-js"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="description" content="oneM2M Specifications navigator"> <link rel="canonical" href="https://specifications.onem2m.org/ts-0019/v2.9.00/5.3/"> <link rel="prev" href="../5.2/"> <link rel="next" href="../5.4/"> <link rel="alternate" type="application/rss+xml" title="RSS feed" href="../feed_rss_created.xml"> <link rel="alternate" type="application/rss+xml" title="RSS feed of updated content" href="../feed_rss_updated.xml"> <link rel="icon" href="../images/favicon.ico"> <meta name="generator" content="mkdocs-1.5.3, mkdocs-material-9.5.18"> <title>5.3 Test architecture - oneM2M Specifications</title> <link rel="stylesheet" href="../assets/stylesheets/main.66ac8b77.min.css"> <link rel="stylesheet" href="../assets/stylesheets/palette.06af60db.min.css"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback"> <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style> <link rel="stylesheet" href="../stylesheets/extra.css"> <script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script> </head> <body dir="ltr" data-md-color-scheme="oneM2M" data-md-color-primary="indigo" data-md-color-accent="indigo"> <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> <label class="md-overlay" for="__drawer"></label> <div data-md-component="skip"> </div> <div data-md-component="announce"> </div> <div data-md-color-scheme="default" data-md-component="outdated" hidden> </div> <header class="md-header md-header--shadow" data-md-component="header"> <nav class="md-header__inner md-grid" aria-label="Header"> <a href=".." title="oneM2M Specifications" class="md-header__button md-logo" aria-label="oneM2M Specifications" data-md-component="logo"> <img src="../images/onem2m.png" alt="logo"> </a> <label class="md-header__button md-icon" for="__drawer"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class="md-header__title" data-md-component="header-title"> <div class="md-header__ellipsis"> <div class="md-header__topic"> <span class="md-ellipsis"> oneM2M Specifications </span> </div> <div class="md-header__topic" data-md-component="header-topic"> <span class="md-ellipsis"> 5.3 Test architecture </span> </div> </div> </div> <label class="md-header__button md-icon" for="__search"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class="md-search" data-md-component="search" role="dialog"> <label class="md-search__overlay" for="__search"></label> <div class="md-search__inner" role="search"> <form class="md-search__form" name="search"> <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required> <label class="md-search__icon md-icon" for="__search"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class="md-search__options" aria-label="Search"> <a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class="md-search__suggest" data-md-component="search-suggest"></div> </form> <div class="md-search__output"> <div class="md-search__scrollwrap" data-md-scrollfix> <div class="md-search-result" data-md-component="search-result"> <div class="md-search-result__meta"> Initializing search </div> <ol class="md-search-result__list" role="presentation"></ol> </div> </div> </div> </div> </div> </nav> </header> <div class="md-container" data-md-component="container"> <main class="md-main" data-md-component="main"> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" > <div class="md-sidebar__scrollwrap"> <div class="md-sidebar__inner"> <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0"> <label class="md-nav__title" for="__drawer"> <a href=".." title="oneM2M Specifications" class="md-nav__button md-logo" aria-label="oneM2M Specifications" data-md-component="logo"> <img src="../images/onem2m.png" alt="logo"> </a> oneM2M Specifications </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_1" checked> <label class="md-nav__link" for="__nav_1" id="__nav_1_label" tabindex="0"> <span class="md-ellipsis"> TS-0019 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_1_label" aria-expanded="true"> <label class="md-nav__title" for="__nav_1"> <span class="md-nav__icon md-icon"></span> TS-0019 </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../1/" class="md-nav__link"> <span class="md-ellipsis"> 1 Scope </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_1_2" > <label class="md-nav__link" for="__nav_1_2" id="__nav_1_2_label" tabindex="0"> <span class="md-ellipsis"> 2 References </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_1_2_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_1_2"> <span class="md-nav__icon md-icon"></span> 2 References </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../2.1/" class="md-nav__link"> <span class="md-ellipsis"> 2.1 Normative references </span> </a> </li> <li class="md-nav__item"> <a href="../2.2/" class="md-nav__link"> <span class="md-ellipsis"> 2.2 Informative references </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_1_3" > <label class="md-nav__link" for="__nav_1_3" id="__nav_1_3_label" tabindex="0"> <span class="md-ellipsis"> 3 Definition of terms, symbols and abbreviations </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_1_3_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_1_3"> <span class="md-nav__icon md-icon"></span> 3 Definition of terms, symbols and abbreviations </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../3.1/" class="md-nav__link"> <span class="md-ellipsis"> 3.1 Terms </span> </a> </li> <li class="md-nav__item"> <a href="../3.2/" class="md-nav__link"> <span class="md-ellipsis"> 3.2 Symbols </span> </a> </li> <li class="md-nav__item"> <a href="../3.2/" class="md-nav__link"> <span class="md-ellipsis"> 3.2 Abbreviations </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="../4/" class="md-nav__link"> <span class="md-ellipsis"> 4 Conventions </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_1_5" checked> <label class="md-nav__link" for="__nav_1_5" id="__nav_1_5_label" tabindex="0"> <span class="md-ellipsis"> 5 Abstract Test Method (ATM) </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_1_5_label" aria-expanded="true"> <label class="md-nav__title" for="__nav_1_5"> <span class="md-nav__icon md-icon"></span> 5 Abstract Test Method (ATM) </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../5.1/" class="md-nav__link"> <span class="md-ellipsis"> 5.1 Abstract protocol tester </span> </a> </li> <li class="md-nav__item"> <a href="../5.2/" class="md-nav__link"> <span class="md-ellipsis"> 5.2 Test Configuration </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc"> <a href="./" class="md-nav__link md-nav__link--active"> <span class="md-ellipsis"> 5.3 Test architecture </span> </a> </li> <li class="md-nav__item"> <a href="../5.4/" class="md-nav__link"> <span class="md-ellipsis"> 5.4 Ports and ASPs (Abstract Services Primitives) </span> </a> </li> <li class="md-nav__item"> <a href="../5.5/" class="md-nav__link"> <span class="md-ellipsis"> 5.5 Test components </span> </a> </li> <li class="md-nav__item"> <a href="../5.6/" class="md-nav__link"> <span class="md-ellipsis"> 5.6 Test strategy </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="../6/" class="md-nav__link"> <span class="md-ellipsis"> 6 Untestable Test Purposes </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_1_7" > <label class="md-nav__link" for="__nav_1_7" id="__nav_1_7_label" tabindex="0"> <span class="md-ellipsis"> 7 ATS Conventions </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_1_7_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_1_7"> <span class="md-nav__icon md-icon"></span> 7 ATS Conventions </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../7.0/" class="md-nav__link"> <span class="md-ellipsis"> 7.0 Introduction </span> </a> </li> <li class="md-nav__item"> <a href="../7.1/" class="md-nav__link"> <span class="md-ellipsis"> 7.1 Testing conventions </span> </a> </li> <li class="md-nav__item"> <a href="../7.2/" class="md-nav__link"> <span class="md-ellipsis"> 7.2 Naming conventions </span> </a> </li> <li class="md-nav__item"> <a href="../7.3/" class="md-nav__link"> <span class="md-ellipsis"> 7.3 IXIT </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="../8/" class="md-nav__link"> <span class="md-ellipsis"> 8 TTCN-3 Verifications </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_1_9" > <label class="md-nav__link" for="__nav_1_9" id="__nav_1_9_label" tabindex="0"> <span class="md-ellipsis"> Annex A (normative): TTCN-3 library modules </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_1_9_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_1_9"> <span class="md-nav__icon md-icon"></span> Annex A (normative): TTCN-3 library modules </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../A.1/" class="md-nav__link"> <span class="md-ellipsis"> A.1 Electronic annex, zip file with TTCN-3 code </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="../B/" class="md-nav__link"> <span class="md-ellipsis"> Annex B (informative): Bibliography </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="../download/" class="md-nav__link"> <span class="md-ellipsis"> Download </span> </a> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" > <div class="md-sidebar__scrollwrap"> <div class="md-sidebar__inner"> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> </nav> </div> </div> </div> <div class="md-content" data-md-component="content"> <article class="md-content__inner md-typeset"> <h1>5.3 Test architecture</h1> <p>The approach for the implementation of an Abstract Protocol Tester selected in oneM2M follows the recommendation of the oneM2M Testing Framework oneM2M TS-0015 <a href="../2.2/#_ref_i.2">[i.2]</a> where the TTCN-3 language and its architecture are recommended.</p> <p>Following this recommendation the oneM2M tester architecture comprises a non-platform dependent Test Suite, and a platform dependent part.</p> <p><img alt="Figure 5.3-1: High level oneM2M Test Architecture" src="../media/image7.png" /></p> <div class="admonition note"> <p class="admonition-title">Note</p> <p>However, it can be implemented in a semi-independent manner, which will minimize the dependency to those elements.</p> </div> <p><strong>Figure 5.3-1: High level oneM2M Test Architecture</strong></p> <ul> <li><strong>oneM2M</strong> <strong>TTCN</strong> <strong>-3</strong> <strong>Abstract</strong> <strong>Test Suite:</strong> the test suite is platform independent, and it is the cornerstone of the architecture. It allows a complete decoupling between the test suite and the rest of the test system. The test suite is composed of a complete set of test cases covering oneM2M requirements specified by oneM2M TS0001 <a href="../2.1/#_ref_1">[1]</a> and oneM2M TS-0004 <a href="../2.1/#_ref_2">[2]</a>.</li> <li><strong>oneM2M System Adaptor</strong> <strong>:</strong> this is the platform dependent part that includes adaptors and codecs (out of the scope of the present document). This part of the architecture definition depends on the specific platform (e.g. Windows or Linux) and test tool on which the tester is going to run.</li> </ul> <p>Figure 5.3-2 shows the oneM2M TTCN-3 test architecture design used for the oneM2M ATS. The Test Suite needs to interact with the System Adaptor to implement the collection of TTCN-3 test cases that are intended to be used to test the oneM2M IUTs.</p> <p>The oneM2M TTCN-3 test cases implement the test algorithms specified in the TSS&TP document oneM2M TS0018 <a href="../2.1/#_ref_7">[7]</a>, including verdict logic that allows pass/fail diagnosis.</p> <p>The test algorithms use the interfaces defined in <a href="../2.1/#_ref_1">[1]</a> and <a href="../2.1/#_ref_2">[2]</a> (mca, mcc) in order to:</p> <ol> <li>control the test event to be sent towards the IUT; and</li> <li>observe the test events received from the IUT.</li> </ol> <p>In TTCN-3 these two interfaces have been implemented through a set of logical TTCN-3 ports (mcaPort and mcaPortIn for mca interface, and mccPort and mccPortIn for mcc interface) which allows oneM2M message primitives exchange with the IUT.</p> <p><img alt="Figure 5.3-2: oneM2M Test Architecture" src="../media/image8.png" /></p> <p><strong>Figure 5.3-2: oneM2M Test Architecture</strong></p> <p>The oneM2M primitive messages have been mapped into TTCN-3 structure. Through this mapping, the TTCN-3 is able to build and send these messages, as well as receive them via the ports defined above.</p> <p>Additionally, the test cases are able to control and configure the test platform through a dedicated port called acPort while port utPort enables oneM2M TTCN-3 Test Component module to trigger specific action or behaviour on IUT. TTCN3 Test Components can also exchange information through a dedicated port called infoPort.</p> <p>To build up a tester, the test platform needs to be also developed (out of scope). This test platform is composed of three adaptation layers:</p> <ul> <li>PA (Platform Adaptor) layer functionality implements the communication between the TTCN-3 modules and external elements that constitute the test tool such as timers and external functions. The External functions are a powerful resources supported by TTCN-3 language. An External function is a function declared at the TTCN-3 level but implemented at the native level.</li> <li> <p>SA (System Adaptor) layer functionality is divided into two modules:</p> <ul> <li>oneM2M lower layers stack module implements the communication with the IUT and carries out the oneM2M primitives messages sent to or received from the IUT. This module is based on TCP or UDP depending on the binding supported by the IUT. The binding is a system adaptor parameter.</li> <li>Upper Tester Transport module implements functions that enable triggering specific actions or behaviour on the IUT.</li> </ul> </li> <li> <p>CODECS layer is the part of the tester to encode and decode messages between the TTCN-3 abstract internal data representation and the format required by the related base standard which the IUT understands. Several CODECS are required in oneM2M tester to cope with the bindings considered in oneM2M (HTTP, CoAP, MQTT) and the serialization methods (xml, json).</p> </li> </ul> </article> </div> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> </main> <footer class="md-footer"> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class="md-copyright"> <div class="md-copyright__highlight"> Copyright © 2024 oneM2M Partnership Project </div> Made with <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener"> Material for MkDocs </a> </div> <div class="md-social"> <a href="https://specifications.onem2m.org/feed_rss_created.xml" target="_blank" rel="noopener" title="Recipes RSS Feed" class="md-social__link"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M0 64c0-17.7 14.3-32 32-32 229.8 0 416 186.2 416 416 0 17.7-14.3 32-32 32s-32-14.3-32-32C384 253.6 226.4 96 32 96 14.3 96 0 81.7 0 64zm0 352a64 64 0 1 1 128 0 64 64 0 1 1-128 0zm32-256c159.1 0 288 128.9 288 288 0 17.7-14.3 32-32 32s-32-14.3-32-32c0-123.7-100.3-224-224-224-17.7 0-32-14.3-32-32s14.3-32 32-32z"/></svg> </a> <a href="https://git.oneM2M.org" target="_blank" rel="noopener" title="oneM2M GitLab" class="md-social__link"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="m503.5 204.6-.7-1.8-69.7-181.78c-1.4-3.57-3.9-6.59-7.2-8.64-2.4-1.55-5.1-2.515-8-2.81-2.9-.295-5.7.083-8.4 1.11-2.7 1.02-5.1 2.66-7.1 4.78-1.9 2.12-3.3 4.67-4.1 7.44l-47 144H160.8l-47.1-144c-.8-2.77-2.2-5.31-4.1-7.43-2-2.12-4.4-3.75-7.1-4.77a18.1 18.1 0 0 0-8.38-1.113 18.4 18.4 0 0 0-8.04 2.793 18.09 18.09 0 0 0-7.16 8.64L9.267 202.8l-.724 1.8a129.57 129.57 0 0 0-3.52 82c7.747 26.9 24.047 50.7 46.447 67.6l.27.2.59.4 105.97 79.5 52.6 39.7 32 24.2c3.7 1.9 8.3 4.3 13 4.3 4.7 0 9.3-2.4 13-4.3l32-24.2 52.6-39.7 106.7-79.9.3-.3c22.4-16.9 38.7-40.6 45.6-67.5 8.6-27 7.4-55.8-2.6-82z"/></svg> </a> <a href="https://github.com/onem2m" target="_blank" rel="noopener" title="oneM2M @ GitHub" class="md-social__link"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href="https://c.im/@oneM2M" target="_blank" rel="noopener me" title="oneM2M @ Mastodon" class="md-social__link"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </a> <a href="https://www.linkedin.com/company/onem2m/" target="_blank" rel="noopener" title="oneM2M @ LinkedIn" class="md-social__link"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"/></svg> </a> </div> </div> </div> </footer> </div> <div class="md-dialog" data-md-component="dialog"> <div class="md-dialog__inner md-typeset"></div> </div> <script id="__config" type="application/json">{"base": "..", "features": ["content.code.annotate", "content.code.copy", "content.footnote.tooltips", "search.suggest", "search.highlight", "search.share"], "search": "../assets/javascripts/workers/search.b8dbb3d2.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"provider": "mike"}}</script> <script src="../assets/javascripts/bundle.3220b9d7.min.js"></script> </body> </html>