Financial highlights
Ultima quotazione 63,32€
Variazione -0,75%
17/03/2026 - 17:35
data source: Investis Digital
Financial highlights
Ultima quotazione 63,32€
Variazione -0,75%
17/03/2026 - 17:35
data source: Investis Digital
Financial Results & Reports
Press releases
REAL-TIME ANOMALY DETECTION
Health & Usage Monitoring System (HUMS) provides Customers with data storage and infrastructure to deal with specific fleet HUMS and maintenance management, driving down operating costs and increasing aircraft availability.
The following has evaluated to null or missing:
==> Links [in template "20115#20151#10383429" at line 194, column 30]
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----
----
FTL stack trace ("~" means nesting-related):
- Failed at: #if Links.ExternalTargetURL.getData()... [in template "20115#20151#10383429" at line 194, column 25]
----
1<#assign siteExpandoBridge = themeDisplay.getScopeGroup().getExpandoBridge() />
2<#assign new_restyle = (siteExpandoBridge.hasAttribute("new-restyle")?then(getterUtil.getBoolean(siteExpandoBridge.getAttribute("new-restyle", false)),false)) />
3<#if new_restyle?? && new_restyle>
4 <@leonardo.articleInfo .vars "(I3) Video Launch"/>
5
6 <#macro videoBox yt canto video poster>
7
8 <div class="video-full-width-container-rounded">
9 <button
10 class="video-full-width"
11 title="play report video"
12 onclick="playSingleVideo(this)"
13 data-video="${video}"
14 >
15 <div class="cover rounded-20">
16 <#if VideoInfo.Image.getData()?? && VideoInfo.Image.getData() != "">
17 <#assign scalingDetails = {
18 "desktop": {"alternateImage": {}, "key": "h_560"},
19 "tl": {"alternateImage": VideoInfo.Image.ImageTl!, "key": "h_400"},
20 "tp": {"alternateImage": VideoInfo.Image.ImageTp!, "key": "h_400"},
21 "mobile": {"alternateImage": VideoInfo.Image.ImageM!, "key": "h_300"} }>
22 <#assign posterImg = leonardo.adaptImage(VideoInfo.Image!, scalingDetails )>
23 <picture>
24 <source
25 srcset="${posterImg.mobile?replace(" ", "%20")!}"
26 media="(max-width: 576px)"
27 />
28 <source
29 srcset="${posterImg.tablet_portrait?replace(" ", "%20")!}"
30 media="(max-width: 768px)"
31 >
32 <source
33 srcset="${posterImg.tablet_landscape?replace(" ", "%20")!}"
34 media="(max-width: 1024px)"
35 >
36 <img class="img-fluid" alt="${posterImg.alt_desktop!}" src="${posterImg.desktop?replace(" ", "%20")!}" />
37 </picture>
38 </#if>
39
40 <div class="btn-play">
41 <img
42 class="icon"
43 src="${themeDisplay.getPathThemeImages()}/img/generic/button-play.svg"
44 alt="play"
45 />
46 <img
47 class="icon-hover"
48 src="${themeDisplay.getPathThemeImages()}/img/generic/button-play-hover.svg"
49 alt="play"
50 />
51 </div>
52 </div>
53 </button>
54 </div>
55 </#macro>
56
57 <#if VideoInfo.Video.getData() != "" || VideoInfo.YoutubeId.getData() != "" || VideoInfo.CantoUrl.getData() != "" >
58
59 <#assign scalingDetails = {
60 "desktop": {"alternateImage": {}, "key": "w_720"},
61 "tl": {"alternateImage": VideoInfo.Image.ImageTl!, "key": "h_695"},
62 "tp": {"alternateImage": VideoInfo.Image.ImageTp!, "key": "w_768"},
63 "mobile": {"alternateImage": VideoInfo.Image.ImageM!, "key": "w_375"}
64 }>
65 <#assign posterImg = leonardo.adaptImage(VideoInfo.Image!, scalingDetails )>
66
67 <#assign isYt = (VideoInfo.YoutubeId.getData() != "") >
68 <#assign isCanto = (VideoInfo.CantoUrl.getData())?has_content && (VideoInfo.CantoUrl.getData() != "") >
69
70 <#if (VideoInfo.CantoUrl.getData())?has_content && VideoInfo.CantoUrl.getData() != "">
71 <#assign videoStr = VideoInfo.CantoUrl.getData()>
72 <#elseif VideoInfo.YoutubeId.getData() != "">
73 <#assign videoStr = VideoInfo.YoutubeId.getData()>
74 <#elseif VideoInfo.Video.getSiblings()?has_content>
75 <#assign videoStr = "">
76 <#list VideoInfo.Video.getSiblings() as cur_Video>
77 <#assign videoFile = cur_Video.getData()>
78 <#assign videoFileType = cur_Video.VideoType.getData()>
79 <#if videoStr?? && videoStr != "">
80 <#assign videoStr = videoStr + ",">
81 </#if>
82 <#assign videoStr = videoStr + "${themeDisplay.getPortalURL()}" + videoFile>
83 </#list>
84 </#if>
85
86 <!--Start Module: Plan Highlights-->
87 <div class="container-full-width padding-bottom padding-top">
88 <div class="container">
89 <div class="flex-grid-plus-cards video">
90 <div class="left <#if VideoInfo.ImagePosition.getData() == "right">order-lg-2</#if>">
91 <#if VideoInfo.YoutubeId.getData() != "">
92 <div class="video-full-width-container-rounded">
93 <#assign videoId = VideoInfo.YoutubeId.getData()>
94 <button
95 type="button"
96 class="video-full-width video-yt"
97 title="play report video"
98 data-video="${videoId}"
99 id="button-video-${videoId}"
100 >
101 <div class="cover rounded-20">
102 <#if VideoInfo.Image.getData()?? && VideoInfo.Image.getData() != "">
103 <#assign scalingDetails = {
104 "desktop": {"alternateImage": {}, "key": "h_560"},
105 "tl": {"alternateImage": VideoInfo.Image.ImageTl!, "key": "h_400"},
106 "tp": {"alternateImage": VideoInfo.Image.ImageTp!, "key": "h_400"},
107 "mobile": {"alternateImage": VideoInfo.Image.ImageM!, "key": "h_300"} }>
108 <#assign posterImg = leonardo.adaptImage(VideoInfo.Image!, scalingDetails )>
109 <picture>
110 <source
111 srcset="${posterImg.mobile?replace(" ", "%20")!}"
112 media="(max-width: 576px)"
113 />
114 <source
115 srcset="${posterImg.tablet_portrait?replace(" ", "%20")!}"
116 media="(max-width: 768px)"
117 >
118 <source
119 srcset="${posterImg.tablet_landscape?replace(" ", "%20")!}"
120 media="(max-width: 1024px)"
121 >
122 <img class="img-fluid" alt="${posterImg.alt_desktop!}" src="${posterImg.desktop?replace(" ", "%20")!}" />
123 </picture>
124 </#if>
125
126 <div class="btn-play">
127 <img
128 class="icon"
129 src="${themeDisplay.getPathThemeImages()}/img/generic/button-play.svg"
130 alt="play"
131 />
132 <img
133 class="icon-hover"
134 src="${themeDisplay.getPathThemeImages()}/img/generic/button-play-hover.svg"
135 alt="play"
136 />
137 </div>
138 </div>
139 </button>
140 <div id="video-${videoId}" class="embed-responsive embed-responsive-16by9" style="display:none;">
141 <iframe
142 id="youtube-player-${videoId}"
143 width="100%"
144 height="100%"
145 frameborder="0"
146 allow="autoplay; fullscreen; encrypted-media"
147 allowfullscreen
148 playsinline
149 ></iframe>
150 </div>
151 </div>
152 <script>
153 (function() {
154 const button = document.getElementById("button-video-${videoId}");
155 const overlay = document.getElementById("video-${videoId}");
156 const iframe = document.getElementById("youtube-player-${videoId}");
157
158 button.addEventListener("click", function() {
159 const videoId = button.dataset.video;
160
161 iframe.src = "https://www.youtube.com/embed/" + videoId + "?autoplay=1&rel=0";
162 overlay.style.display = "block";
163 button.style.display = "none";
164 });
165 })();
166 </script>
167 <#else>
168 <@videoBox yt=isYt canto=isCanto video=videoStr poster=posterImg />
169 </#if>
170 </div>
171 <div class="right component-with-title">
172 <!--Start Module: Highlights Pitch-->
173 <div>
174 <#if TextInfo.Title.getData() != "" >
175 <p class="title title-regular"><@leonardo.escapeTitle title=TextInfo.Title.getData()/></p>
176 </#if>
177 <#if TextInfo.Title.Description?? && TextInfo.Title.Description.getData() != "" >
178 <p class="description body-small"><@leonardo.escapeTitle title=TextInfo.Title.Description.getData()/></p>
179 </#if>
180 </div>
181 <#if TextInfo.Title.Attach.getData() !=''>
182 <div class="card-interview centered download">
183 <#list TextInfo.Title.Attach.getSiblings() as node>
184 <#if TextInfo.Title.Attach?? && TextInfo.Title.Attach.getData() != "" && TextInfo.Title.Attach.Label.getData() != "">
185 <div class="card">
186 <a href="${TextInfo.Title.Attach.getData()}" target="_blank" class="label-regular" title="${TextInfo.Title.Attach.Label.getData()}" download>
187 <span>${TextInfo.Title.Attach.Label.getData()}</span>
188 </a>
189 </div>
190 </#if>
191 </#list>
192 </div>
193 </#if>
194 <#if Links.ExternalTargetURL.getData() !='' || Links.LinkTargetPage.getFriendlyUrl() !=''>
195 <div class="flex flex-col gap-4">
196 <#list Links.getSiblings() as node>
197 <#if node.ExternalTargetURL.getData() !='' && node.LinkText.getData() !=''>
198 <#assign url = node.ExternalTargetURL.getData() />
199 </#if>
200 <#if node.LinkTargetPage.getFriendlyUrl() !='' && node.LinkText.getData() !=''>
201 <#assign url = node.LinkTargetPage.getFriendlyUrl() />
202 </#if>
203 <a href="${url}" target ="${node.LinkTargetOpenIn.getData()}" title="${node.LinkText.getData()}" class="card-text-arrow">
204 <p class="body-medium">${node.LinkText.getData()}</p>
205 </a>
206 </#list>
207 </div>
208 </#if>
209 <!--End Module: Highlights Pitch-->
210 </div>
211 </div>
212 </div>
213 </div>
214 <!--End Module: Plan Highlights-->
215 <#else>
216 <!-- No video selected -->
217 </#if>
218<#else>
219 <@leonardo.articleInfo .vars "(I3) Video Launch"/>
220 <#assign rndNamespace = randomNamespace>
221 <#assign currentLayoutFriendlyURL = themeDisplay.getLayout().getFriendlyURL()?remove_beginning("/") />
222
223 <#if currentLayoutFriendlyURL == "home">
224 <#assign cssForTitle = "plan-highlights">
225 <#else>
226 <#assign cssForTitle = "plan-highlights--investors">
227 </#if>
228
229 <#macro downloadIcon>
230 <svg xmlns="http://www.w3.org/2000/svg" width="14" height="18" viewBox="0 0 14 18">
231 <path fill="#000" fill-rule="nonzero" d="M6.61 12.763l-2.145-2.24a.58.58 0 0 1 0-.796c.211-.22.551-.22.762 0l1.235 1.29V6.75c0-.31.24-.563.538-.563.297 0 .538.252.538.563v4.267l1.235-1.29c.21-.22.551-.22.762 0a.58.58 0 0 1 0 .796l-2.145 2.24a.526.526 0 0 1-.78 0zM12.62 18H1.383C.62 18 0 17.368 0 16.592V5.037c0-.49.19-.968.52-1.314L3.565.544A1.728 1.728 0 0 1 4.82 0h7.797C13.38 0 14 .631 14 1.407v15.186C14 17.37 13.38 18 12.619 18zM4.82 1.125a.682.682 0 0 0-.496.214L1.282 4.52a.755.755 0 0 0-.205.518v11.555c0 .156.137.283.306.283h11.235c.168 0 .305-.127.305-.282V1.407c0-.155-.137-.282-.305-.282H4.821zm-.783 4.5H2.154a.551.551 0 0 1-.539-.563c0-.31.242-.562.539-.562h1.884c.15 0 .27-.126.27-.281V2.25c0-.31.24-.563.538-.563.297 0 .539.252.539.563v1.969c0 .775-.605 1.406-1.347 1.406zm6.193 9.563H3.769a.55.55 0 0 1-.538-.563.55.55 0 0 1 .538-.563h6.462a.55.55 0 0 1 .538.563.55.55 0 0 1-.538.563z"/>
232 </svg>
233 </#macro>
234 <#macro videoBox yt canto video poster>
235 <div class="grid grid--d50p grid--tl50p grid--tp100p grid--m100p">
236 <div class="plan-highlights--wrapper">
237 <#if canto>
238 <div class="leo-video canto-video"
239 data-video-data='{
240 "showControls":true,
241 "videoSources":[
242 "${video}"
243 ],
244 "posters":{
245 "desktop":"${poster.desktop!}",
246 "tabletLandscape":"${poster.tablet_landscape!}",
247 "tabletPortrait":"${poster.tablet_portrait!}",
248 "mobile":"${poster.mobile!}"
249 }}'
250 data-img-url-d="${poster.desktop!}"
251 data-img-url-tl="${poster.tablet_landscape!}"
252 data-img-url-tp="${poster.tablet_portrait!}"
253 data-img-url-m="${poster.mobile!}">
254 </div>
255 <#elseif yt>
256 <div class="youtube-player-container "
257 data-video-id="${video}"
258 data-div-id = "${randomNamespace}${video}"
259 data-img-url-d="${poster.desktop!}"
260 data-img-url-tl="${poster.tablet_landscape!}"
261 data-img-url-tp="${poster.tablet_portrait!}"
262 data-img-url-m="${poster.mobile!}"
263 data-use-no-cookie-domain="true"
264 data-play-fullscreen="true"
265 data-video-controls="true"
266 tabindex="1">
267 <div class="youtube-player" id="${randomNamespace}${video}"></div>
268 </div>
269 <#else>
270 <div class="leo-video"
271 data-video-data="{
272 "showControls":true,
273 "videoSources":[
274 ${video}
275 ],
276 "posters":{
277 "desktop":"${poster.desktop!}",
278 "tabletLandscape":"${poster.tablet_landscape!}",
279 "tabletPortrait":"${poster.tablet_portrait!}",
280 "mobile":"${poster.mobile!}"
281 }}"
282 data-img-url-d="${poster.desktop!}"
283 data-img-url-tl="${poster.tablet_landscape!}"
284 data-img-url-tp="${poster.tablet_portrait!}"
285 data-img-url-m="${poster.mobile!}">
286 </div>
287 </#if>
288 </div>
289 </div>
290 </#macro>
291
292 <#if VideoInfo.Video.getData() != "" || VideoInfo.YoutubeId.getData() != "" || VideoInfo.CantoUrl.getData() != "" >
293
294 <#assign isLeft = (VideoInfo.ImagePosition?? && VideoInfo.ImagePosition.getData() != "" && !(VideoInfo.ImagePosition.getData())?contains("right")) >
295
296 <#assign scalingDetails = {
297 "desktop": {"alternateImage": {}, "key": "w_720"},
298 "tl": {"alternateImage": VideoInfo.Image.ImageTl!, "key": "h_695"},
299 "tp": {"alternateImage": VideoInfo.Image.ImageTp!, "key": "w_768"},
300 "mobile": {"alternateImage": VideoInfo.Image.ImageM!, "key": "w_375"}
301 }>
302 <#assign posterImg = leonardo.adaptImage(VideoInfo.Image!, scalingDetails )>
303
304 <noscript>
305 <img src="${posterImg.desktop!}" alt='${posterImg.alt_desktop!}'>
306 <img src="${posterImg.tablet_landscape!}" alt='${posterImg.alt_tablet_landscape!}'>
307 <img src="${posterImg.tablet_portrait!}" alt='${posterImg.alt_tablet_portrait!}'>
308 <img src="${posterImg.mobile!}" alt='${posterImg.alt_mobile!}'>
309 </noscript>
310
311 <#assign isYt = (VideoInfo.YoutubeId.getData() != "") >
312 <#assign isCanto = (VideoInfo.CantoUrl.getData())?has_content && (VideoInfo.CantoUrl.getData() != "") >
313
314 <#if (VideoInfo.CantoUrl.getData())?has_content && VideoInfo.CantoUrl.getData() != "">
315 <#assign videoStr = VideoInfo.CantoUrl.getData()>
316 <#elseif VideoInfo.YoutubeId.getData() != "">
317 <#assign videoStr = VideoInfo.YoutubeId.getData()>
318 <#elseif VideoInfo.Video.getSiblings()?has_content>
319 <#assign videoStr = "">
320 <#list VideoInfo.Video.getSiblings() as cur_Video>
321 <#assign videoFile = cur_Video.getData()>
322 <#assign videoFileType = cur_Video.VideoType.getData()>
323 <#if videoStr?? && videoStr != "">
324 <#assign videoStr = videoStr + ",">
325 </#if>
326 <#assign videoStr = videoStr + "{"src":"" + videoFile + "","type":"" + videoFileType + ""}">
327 </#list>
328 </#if>
329
330 <!--Start Module: Plan Highlights-->
331 <div class="section-container section-container--fixed">
332 <#if TextInfo.Title.isAnchorEnabled?? && getterUtil.getBoolean(TextInfo.Title.isAnchorEnabled.getData())>
333 <#assign labelIsLeft = ((TextInfo.Title.isAnchorEnabled.AnchorText.LabelPosition.getData())!"left") == "left">
334 <div class="section-grid layout--tp-col layout--m-col">
335 <#if !labelIsLeft >
336 <div class="grid grid--d50p grid--tl50p grid--tp100p grid--m100p"></div>
337 </#if>
338 <div class="grid grid--d50p grid--tl50p grid--tp100p grid--m100p">
339 <!--Start Module: Goto-->
340 <#if TextInfo.Title.isAnchorEnabled.AnchorText.getData() != "" >
341 <a class='goto ${(!labelIsLeft)?then("goto--icon-left","")}' href="javascript:void(0)" title="Scroll to next section">${TextInfo.Title.isAnchorEnabled.AnchorText.getData()}<span class="icon--goto"></span></a>
342 </#if>
343 <!--End Module: Goto-->
344 </div>
345 <#if labelIsLeft>
346 <div class="grid grid--d50p grid--tl50p grid--tp100p grid--m100p"></div>
347 </#if>
348 </div>
349 </#if>
350 <div class="${cssForTitle}">
351 <div class="section-grid ${(!isLeft)?then('layout--tp-col-reverse layout--m-col-reverse','layout--tp-col layout--m-col')}">
352 <#if isLeft >
353 <@videoBox yt=isYt canto=isCanto video=videoStr poster=posterImg />
354 </#if>
355 <div class="grid grid--d50p grid--tl50p grid--tp100p grid--m100p">
356 <!--Start Module: Highlights Pitch-->
357 <div class="highlights-pitch">
358 <#if TextInfo.Title.getData() != "" >
359 <#if TextInfo.Title.isH1?? && getterUtil.getBoolean(TextInfo.Title.isH1.getData())>
360 <h1 class="highlights-pitch--title"><@leonardo.escapeTitle title=TextInfo.Title.getData()/></h1>
361 <#else>
362 <h2 class="highlights-pitch--title"><@leonardo.escapeTitle title=TextInfo.Title.getData()/></h2>
363 </#if>
364 <#if TextInfo.Title.Description?? && TextInfo.Title.Description.getData() != "" >
365 <p class="highlights-pitch--description"><@leonardo.escapeTitle title=TextInfo.Title.Description.getData()/></p>
366 </#if>
367 </#if>
368 <#if TextInfo.Title.Attach?? && TextInfo.Title.Attach.getData() != "">
369 <div class="highlights-pitch--file-downloads">
370 <#list TextInfo.Title.Attach.getSiblings() as cur_file>
371 <#assign file_info = leonardo.findFileEntryInfo(cur_file.getData()) >
372 <div class="highlights-pitch--file">
373 <a class="file"
374 href="${file_info.downloadUrl}"
375 target="_blank">
376 <@downloadIcon />
377 <span class="highlights-pitch--file--filename">
378 ${(cur_file.Label.getData())!(file_info.title)!}
379 </span>
380 </a>
381 </div>
382 </#list>
383 </div>
384 </#if>
385 <#assign opened = false>
386 <#if Links?has_content>
387 <#list Links.getSiblings() as cur_Link>
388 <#assign targetUrl=leonardo.getTargetUrl(cur_Link.ExternalTargetURL, cur_Link.LinkTargetPage)!>
389 <#if targetUrl?has_content>
390 <#assign target=leonardo.getTarget(cur_Link.LinkTargetOpenIn!)!>
391 <#if opened = false>
392 <div class="section-hero-card--targets" >
393 <#assign opened = true>
394 </#if>
395 <div class="section-hero-card--target">
396 <a class="section-hero-card--target--link"
397 href="${targetUrl}"
398 target = "${target}"
399 title="${cur_Link.LinkText.data!}" >
400 ${cur_Link.LinkText.data!}
401 <span class="icon--read-more"></span>
402 </a>
403 </div>
404 </#if>
405 </#list>
406 <#if opened>
407 </div>
408 </#if>
409 </#if>
410 </div>
411 <!--End Module: Highlights Pitch-->
412 </div>
413 <#if !isLeft >
414 <@videoBox yt=isYt canto=isCanto video=videoStr poster=posterImg />
415 </#if>
416 </div>
417 </div>
418 </div>
419 <!--End Module: Plan Highlights-->
420 <#else>
421 <!-- No video selected -->
422 </#if>
423</#if>
2026-03-17T17:35:18Z
NSC_Qppm-ovpwp-tjup-qspe - ffffffff0919144745525d5f4f58455e445a4a423660
cookie_disclaimer:true
page_disclaimer :false