An error occurred while processing the template.
The following has evaluated to null or missing:
==> request.getParameter("param")  [in template "20096#20121#328083" at line 66, column 19]

----
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: #assign param1 = request.getParameter...  [in template "20096#20121#328083" at line 66, column 1]
----
1<script src="https://cdnjs.cloudflare.com/ajax/libs/lightbox2/2.11.3/js/lightbox.js"></script> 
2<link rel= "stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/lightbox2/2.11.3/css/lightbox.css"> 
3 
4<style> 
5.button { 
6  display: inline-block; 
7  border-radius: 50px 50px 50px 50px; 
8  background-color: #005ef5; 
9  border: 1px; 
10  color: #FFFFFF; 
11  text-align: center; 
12  font-size: 15px; 
13  padding: 10px; 
14  width: 150px; 
15  transition: all 0.5s; 
16  cursor: pointer; 
17
18.button span { 
19  cursor: pointer; 
20  display: inline-block; 
21  position: relative; 
22  transition: 0.5s; 
23
24.button span:after { 
25  content: '\00bb'; 
26  position: absolute; 
27  opacity: 0; 
28  top: 0; 
29  right: -20px; 
30  transition: 0.5s; 
31
32 
33.button:hover span { 
34  padding-right: 25px; 
35
36.button:hover{ 
37background-color: #00bfff; 
38  color: white; 
39
40.button:hover span:after { 
41  opacity: 1; 
42  right: 0; 
43
44.card{ 
45     display: inline-block; 
46     box-shadow: 2px 2px 20px black; 
47     border-radius: 5px;  
48     margin: 2%; 
49
50</style> 
51<#assign Post =""/> 
52<#assign Post ="Post on"/> 
53				<#if locale?contains("hi")> 
54				<#assign Post ="भेजा गया दिनांक"/> 
55			</#if> 
56			 
57				<#assign Viewmore =""/> 
58      <#assign Viewmore ="View More"/> 
59				<#if locale?contains("hi")> 
60				<#assign Viewmore ="अधिक देखें"/> 
61			</#if> 
62 
63 
64 
65 
66<#assign param1 = request.getParameter("param")/> 
67<br> 
68<h3 style="text-align:center;font-weight:700;">Projects Related to ${param1} Technology</h3> 
69<br> 
70<div class="container-space"> 
71<#assign count=0 /> 
72<#if entries?has_content> 
73   <#list entries as entry> 
74	 <#assign assetRenderer = entry.getAssetRenderer()/> 
75	 <#assign className = assetRenderer.getClassName()/> 
76	 <#assign entryTitle = htmlUtil.escape(assetRenderer.getTitle(locale))/> 
77	 <#assign viewURL= assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, entry,true)/>		  								 
78	 <#assign viewURL = assetRenderer.getURLViewInContext(renderRequest, renderResponse, viewURL)/> 
79	 <#assign fields = entry.getAssetRenderer().getDDMFormValuesReader().getDDMFormValues().getDDMFormFieldValues()/> 
80<#if fields[1].getValue().getString(locale)== param1>		 
81			 
82			 
83<#assign docValJSON = fields[2].getValue().getString(locale) /> 
84<#assign imageUrl = jsonFactoryUtil.createJSONObject(docValJSON).getString("url") /> 
85<#if imageUrl?has_content> 
86 
87<#else> 
88<#assign imageUrl = "/documents/676924/679930/Tech080820181709230.jpg/abb94334-77e9-4623-a36f-f6abf59e52f8?t=1669112725720"/> 
89</#if> 
90<#if count%3=0 > 
91<div class="row m-0"> 
92 
93</#if> 
94 
95 
96 
97			<div class="col-lg-4 col-md-6 col-sm-12">	 
98				<#if entry.getAssetRenderer().hasEditPermission(themeDisplay.getPermissionChecker())> 
99        <#assign redirectURL = renderResponse.createRenderURL() /> 
100 
101        ${redirectURL.setParameter("struts_action", "/asset_publisher/add_asset_redirect")} 
102        ${redirectURL.setWindowState("pop_up")} 
103 
104        <#assign editPortletURL = entry.getAssetRenderer().getURLEdit(renderRequest, renderResponse)!"" /> 
105 
106        <#if validator.isNotNull(editPortletURL)> 
107            <#assign title1 = languageUtil.format(locale, "edit-x", entry.getTitle(locale)) /> 
108				    <a class="content-edit-icon-home-page-sliders" href="${editPortletURL}"><i class="fas fa-edit"></i></a> 
109        </#if> 
110    </#if>	 
111				 
112				<div class="card " style="height: 430px;padding : 10px;"> 
113					<div  class="image"> 
114					<a href="${imageUrl}" data-lightbox="roadtri"><img src="${imageUrl}" width="100%" height="220px" style="border: 10px solid white"></a> 
115					</div> 
116						<div class="card-body"> 
117						<h5 class="card-title mb-2" style="height: 70px; text-align: center;"> 
118							${fields[0].getValue().getString(locale)} 
119						</h5> 
120						 <div style="text-align: center;" > 
121						<a href="${viewURL}" class="button btn btn-info"><span>${Viewmore}</span></a><hr> 
122						<p> 
123								${Post} &nbsp;: ${entry.getPublishDate()?date} 
124						</p> 
125						</div> 
126					</div> 
127				</div> 
128				 
129				 
130				 
131			</div> 
132	 
133	 
134 
135	 
136	 
137	 
138	 
139	 
140	 
141	 
142			<#if count%3=2 || entries?size=count > 
143 		</div> 
144</#if>	 
145 
146<#assign count++ /> 
147	 
148	 
149	 
150	 
151	 
152		</#if> 
153	 
154	 
155</#list> 
156</div> 
157	</#if> 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> request.getParameter("param")  [in template "20096#20121#887434" at line 17, column 84]

----
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: #assign param1 = request.getParameter...  [in template "20096#20121#887434" at line 17, column 66]
----
1<#assign Project_related_to =""/> 
2<#assign Project_related_to ="Project related to"/> 
3				<#if locale?contains("hi")> 
4				<#assign Project_related_to ="प्रोजेक्ट से सम्बंधित"/> 
5			</#if> 
6 
7<#assign Technology =""/> 
8<#assign Technology ="Technology"/> 
9				<#if locale?contains("hi")> 
10				<#assign Technology ="तकनीकी"/> 
11			</#if> 
12 
13<section class="w-100 clearfix cpwdOurUnitsSec" id="cpwdOurUnitsSec"> 
14         <div class="cpwdOurUnitsInner"> 
15            <div class="container-fluid container-space custom-container-xxl"> 
16               <div class="cpwdOurUnitsCarousel"> 
17								 <#assign param1 = request.getParameter("param")/>  
18                 	 <div class="cpwdHeadingCommon"> 
19                     <h2> ${Project_related_to} ${param1} ${Technology}</h2> 
20                  </div> 
21                  <div class="owl-carousel owl-theme ourUnitsOwlCarousel"> 
22										 
23 
24 
25     <#if entries?has_content> 
26   <#list entries as entry> 
27	 <#assign assetRenderer = entry.getAssetRenderer()/> 
28	 <#assign className = assetRenderer.getClassName()/> 
29	 <#assign entryTitle = htmlUtil.escape(assetRenderer.getTitle(locale))/> 
30	 <#assign viewURL= assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, entry,true)/>		  								 
31	 <#assign viewURL = assetRenderer.getURLViewInContext(renderRequest, renderResponse, viewURL)/> 
32	 <#assign fields = entry.getAssetRenderer().getDDMFormValuesReader().getDDMFormValues().getDDMFormFieldValues()/> 
33   <#if fields[1].getValue().getString(locale)== param1>		 
34			 
35			 
36<#assign docValJSON = fields[2].getValue().getString(locale) /> 
37<#assign imageUrl = jsonFactoryUtil.createJSONObject(docValJSON).getString("url") /> 
38<#if imageUrl?has_content> 
39 
40<#else> 
41<#assign imageUrl = "/documents/676924/679930/Tech080820181709230.jpg/abb94334-77e9-4623-a36f-f6abf59e52f8?t=1669112725720"/> 
42</#if> 
43 
44					 
45                <div class="item"> 
46									<#if entry.getAssetRenderer().hasEditPermission(themeDisplay.getPermissionChecker())> 
47        <#assign redirectURL = renderResponse.createRenderURL() /> 
48 
49        ${redirectURL.setParameter("struts_action", "/asset_publisher/add_asset_redirect")} 
50        ${redirectURL.setWindowState("pop_up")} 
51 
52        <#assign editPortletURL = entry.getAssetRenderer().getURLEdit(renderRequest, renderResponse)!"" /> 
53 
54        <#if validator.isNotNull(editPortletURL)> 
55            <#assign title = languageUtil.format(locale, "edit-x", entry.getTitle(locale)) /> 
56				    <a class="content-edit-icon-profile" href="${editPortletURL}"><i class="fas fa-edit"></i></a> 
57        </#if> 
58    </#if> 
59									 
60									 <div class="projectBox"> 
61                           <a href="${viewURL}"> 
62                              <div class="projectBoxInner"> 
63                                 <div class="projectImg"> 
64                                    <img style= "border-radius:10px; height:300px;" src="${imageUrl}" alt="img" > 
65                                 </div> 
66                                 <div class="projectTxt"> 
67                                    <h4>${fields[0].getValue().getString(locale)}</h4> 
68                                    <span><@liferay.language key="read_more" /></span> 
69                                 </div> 
70                              </div> 
71													</a> 
72                        </div> 
73                     </div> 
74	</#if> 
75											 
76											</#list> 
77										</#if> 
78										 
79											</div> 
80											</div> 
81							<div class="owlControlGroup w-100 d-flex align-items-center justify-content-center"> 
82                     <div class="owlNavBtn"> 
83                        <div class="btn-wrap owl-nav"> 
84                           <button class="prev-btn owl-prev"><span>‹</span></button> 
85                           <div id="custom-owl-dots3" class="custom-owl-dots owl-dots"></div> 
86                           <button class="next-btn owl-next"><span>›</span></button> 
87                        </div> 
88                     </div> 
89                  </div> 
90								  
91    </section> 
92 
93 <script> 
94        $(document).ready(function() { 
95    // Function to highlight active link based on scroll position 
96    function highlightActiveLink() { 
97      const scrollPosition = $(window).scrollTop(); 
98 
99      $('section').each(function() { 
100        const sectionTop = $(this).offset().top - 50; // Adjust offset if needed 
101        const sectionBottom = sectionTop + $(this).outerHeight(); 
102 
103        if (scrollPosition >= sectionTop && scrollPosition < sectionBottom) { 
104          const targetId = '#' + $(this).attr('id'); 
105          $('.scrollNav a').removeClass('active'); 
106          $('.scrollNav a[href="' + targetId + '"]').addClass('active'); 
107
108      }); 
109
110 
111    // Function for smooth scrolling on link click 
112    $('.scrollNav a').on('click', function(e) { 
113      e.preventDefault(); 
114      const targetId = $(this).attr('href'); 
115      const $targetSection = $(targetId); 
116 
117      if ($targetSection.length) { 
118        $('html, body').animate({ 
119          scrollTop: $targetSection.offset().top 
120        }, 100, 'swing', function() { 
121          highlightActiveLink(); // Highlight active link after scrolling 
122        }); 
123
124    }); 
125 
126    // Highlight active link on initial page load 
127    highlightActiveLink(); 
128 
129    // Highlight active link on scroll 
130    $(window).on('scroll', function() { 
131      highlightActiveLink(); 
132    }); 
133  }); 
134      </script> 
135      
136      <script> 
137          
138         // Get all video containers 
139         var videoContainers = document.querySelectorAll('.video-container'); 
140          
141         // Iterate through each video container 
142         videoContainers.forEach(function (container) { 
143             // Get video and button inside each container 
144             var video = container.querySelector('.video-item'); 
145             var btn = container.querySelector('.video-btn'); 
146          
147             // Function to play/pause video and change button text 
148             function myFunction() { 
149                 if (video.paused) { 
150                     video.play(); 
151                     btn.innerHTML = '<i class="fa fa-pause" aria-hidden="true"></i>'; 
152                 } else { 
153                     video.pause(); 
154                     btn.innerHTML = '<i class="fa fa-play" aria-hidden="true"></i>'; 
155
156
157          
158             // Attach the myFunction to the button's click event 
159             btn.addEventListener('click', myFunction); 
160         }); 
161          
162          
163          
164          
165          
166          
167          
168          
169      </script> 
170 
171      <script> 
172         // Parallax background 
173         $('.jarallax').jarallax({ 
174             speed: 0.5, 
175         }) 
176          
177          
178          
179          
180         $(".youtube-link").grtyoutube({ 
181             autoPlay: true, 
182             theme: "dark", 
183         }); 
184         $(".ourUnitsOwlCarousel").owlCarousel({ 
185             loop: false, 
186             margin: 20, 
187             dots: true, 
188             // autoplay: true, 
189             autoplayTimeout: 5000, 
190             smartSpeed: 1000, 
191             nav: true, 
192             autoplayHoverPause: true, 
193             dotsContainer: '#custom-owl-dots3', 
194             responsive: { 
195                 0: { 
196                     items: 1, 
197                     dots: false, 
198                 }, 
199                 600: { 
200                     items: 3, 
201                     dots: false, 
202                 }, 
203                 768: { 
204                     items: 3, 
205                 }, 
206                 1200: { 
207                     items: 5, 
208                 }, 
209             }, 
210         }); 
211          
212         $(document).ready(function ($) { 
213             var owl = $(".ourUnitsOwlCarousel"); 
214             owl.owlCarousel(); 
215             $(".next-btn").click(function () { 
216                 owl.trigger("next.owl.carousel"); 
217             }); 
218             $(".prev-btn").click(function () { 
219                 owl.trigger("prev.owl.carousel"); 
220             }); 
221             $(".prev-btn").addClass("disabled"); 
222             $(owl).on("translated.owl.carousel", function (event) { 
223                 if ($(".owl-prev").hasClass("disabled")) { 
224                     $(".prev-btn").addClass("disabled"); 
225                 } else { 
226                     $(".prev-btn").removeClass("disabled"); 
227
228                 if ($(".owl-next").hasClass("disabled")) { 
229                     $(".next-btn").addClass("disabled"); 
230                 } else { 
231                     $(".next-btn").removeClass("disabled"); 
232
233             }); 
234         }); 
235      </script> 
236      <script> 
237         const element = document.querySelector(".cpwdTimeline"); 
238         let isDragging = false; 
239         let previousX; 
240         let autoplayInterval; // Variable to store autoplay interval 
241          
242         function handleMove(event) { 
243             if (isDragging) { 
244                 const clientX = event.clientX || event.touches[0].clientX; 
245                 const deltaX = clientX - previousX; 
246                 element.scrollLeft -= deltaX; 
247                 previousX = clientX; 
248
249
250          
251         element.addEventListener('mousedown', (event) => { 
252             isDragging = true; 
253             previousX = event.clientX; 
254         }); 
255          
256         element.addEventListener('touchstart', (event) => { 
257             isDragging = true; 
258             previousX = event.touches[0].clientX; 
259         }); 
260          
261         element.addEventListener('mousemove', handleMove); 
262         element.addEventListener('touchmove', handleMove); 
263          
264         window.addEventListener('mouseup', () => { 
265             isDragging = false; 
266         }); 
267          
268         element.addEventListener('selectstart', () => { 
269             const selection = window.getSelection(); 
270             if (selection.toString().length > 0 && selection.focusNode.parentElement === element) { 
271                 element.scrollLeft = 0; 
272
273         }); 
274          
275         function startAutoplay() { 
276             autoplayInterval = setInterval(() => { 
277                 // Change the scrollLeft value here for smooth autoplay 
278                 element.scrollLeft += 1; // Adjust this value for the desired scrolling speed 
279             }, 20); // Change the interval for smoother/faster scrolling 
280
281          
282         function stopAutoplay() { 
283             clearInterval(autoplayInterval); 
284
285          
286         element.addEventListener('mouseenter', stopAutoplay); // Pause autoplay on hover 
287         element.addEventListener('mouseleave', startAutoplay); // Resume autoplay on mouse leave 
288          
289         // Initial handling of window size on load 
290         function handleResize() { 
291             isDragging = false; 
292
293          
294         window.addEventListener('resize', handleResize); 
295         handleResize(); 
296          
297         $('.counting').each(function () { 
298             var $this = $(this), 
299                 countTo = $this.attr('data-count'); 
300          
301             $({ countNum: $this.text() }).animate({ 
302                 countNum: countTo 
303             }, { 
304                 duration: 3000, 
305                 easing: 'linear', 
306                 step: function () { 
307                     $this.text(Math.floor(this.countNum)); 
308                 }, 
309                 complete: function () { 
310                     $this.text(this.countNum); 
311
312             }); 
313         }); 
314          
315         // Start autoplay initially 
316         startAutoplay(); 
317          
318          
319          
320      </script> 
321      <script> 
322        //  var $sidebar = $('#sidebar-nav'); 
323        //  var $content = $('#content'); 
324        //  var sidebarTop = $sidebar.position().top; 
325          
326        //  $(window).scroll(function () { 
327        //      var windowScrollTop = $(window).scrollTop(); 
328        //      var blogHeight = $content.outerHeight(); 
329          
330        //      if (windowScrollTop >= sidebarTop) { 
331        //          $sidebar.toggleClass('sticky', windowScrollTop < blogHeight); 
332        //      } else { 
333        //          $sidebar.removeClass('sticky'); 
334        //      } 
335        //  }); 
336          
337          
338          
339      </script>