                    $(this).data('name') + '</a></li>',
                    id: id
                });
            }
        });

        elements.sort(function (a, b) {
            if (!tabsInfo[a.id] && !tabsInfo[b.id]) return 0;
            if (!tabsInfo[a.id]) return 1;
            if (!tabsInfo[b.id]) return -1;
            if (tabsInfo[a.id].order < tabsInfo[b.id].order) return -1;
            if (tabsInfo[a.id].order > tabsInfo[b.id].order) return 1;
            return 0;
        });

        for (let e = 0; e < elements.length; e++) {
            lines += elements[e].line;
        }
        $adminSideMenu.find('.admin-sidemenu-menu').html(lines);

        $('.admin-sidemenu-close').off('click').on('click', function () {
            $adminSideMain.toggleClass('admin-sidemenu-closed');
            $adminSideMenu.toggleClass('admin-sidemenu-closed');
            $('.admin-sidemenu-close i').toggleClass('hide');

            setTimeout(function () {
                //resizeGrids();
                $(window).trigger('resize');
            }, 400);
        });

        $('.admin-sidemenu-items').off('click').on('click', function (e) {
            e.preventDefault();
            e.stopPropagation();
            window.location.hash = '#' + $(this).data('tab');
        });
        $('.admin-sidemenu-items a').off('click').on('click', function (e) {
            e.preventDefault();
            e.stopPropagation();
            window.location.hash = '#' + $(this).parent().data('tab');
        });

        // Show if update available
        tabs.hosts.updateCounter();
        tabs.adapters.updateCounter();
    }
The software uses external input to construct a pathname that is intended to identify a file or directory that is located underneath a restricted parent directory, but the software does not properly neutralize special elements within the pathname that can cause the pathname to resolve to a location that is outside of the restricted directory.