Twig \ Error \ RuntimeError
An exception has been thrown during the rendering of a template ("Trying to access array offset on value of type null").
Previous exceptions
  • Trying to access array offset on value of type null (2)
Twig\Error\RuntimeError thrown with message "An exception has been thrown during the rendering of a template ("Trying to access array offset on value of type null")." Stacktrace: #67 Twig\Error\RuntimeError in /home/setperk/public_html/media/gantry5/engines/nucleus/templates/page.html.twig:73 #66 Whoops\Exception\ErrorException in /home/setperk/public_html/libraries/gantry5/vendor/leafo/scssphp/src/Compiler.php:2556 #65 Gantry\Component\Whoops\SystemFacade:handleError in /home/setperk/public_html/libraries/gantry5/vendor/leafo/scssphp/src/Compiler.php:2556 #64 Leafo\ScssPhp\Compiler:reduce in /home/setperk/public_html/libraries/gantry5/vendor/leafo/scssphp/src/Compiler.php:4324 #63 Leafo\ScssPhp\Compiler:callNativeFunction in /home/setperk/public_html/libraries/gantry5/vendor/leafo/scssphp/src/Compiler.php:2755 #62 Leafo\ScssPhp\Compiler:fncall in /home/setperk/public_html/libraries/gantry5/vendor/leafo/scssphp/src/Compiler.php:2727 #61 Leafo\ScssPhp\Compiler:reduce in /home/setperk/public_html/libraries/gantry5/vendor/leafo/scssphp/src/Compiler.php:2127 #60 Leafo\ScssPhp\Compiler:compileChild in /home/setperk/public_html/libraries/gantry5/vendor/leafo/scssphp/src/Compiler.php:1654 #59 Leafo\ScssPhp\Compiler:compileChildren in /home/setperk/public_html/libraries/gantry5/vendor/leafo/scssphp/src/Compiler.php:2242 #58 Leafo\ScssPhp\Compiler:compileChild in /home/setperk/public_html/libraries/gantry5/vendor/leafo/scssphp/src/Compiler.php:1654 #57 Leafo\ScssPhp\Compiler:compileChildren in /home/setperk/public_html/libraries/gantry5/vendor/leafo/scssphp/src/Compiler.php:2212 #56 Leafo\ScssPhp\Compiler:compileChild in /home/setperk/public_html/libraries/gantry5/vendor/leafo/scssphp/src/Compiler.php:1654 #55 Leafo\ScssPhp\Compiler:compileChildren in /home/setperk/public_html/libraries/gantry5/vendor/leafo/scssphp/src/Compiler.php:2242 #54 Leafo\ScssPhp\Compiler:compileChild in /home/setperk/public_html/libraries/gantry5/vendor/leafo/scssphp/src/Compiler.php:1690 #53 Leafo\ScssPhp\Compiler:compileChildrenNoReturn in /home/setperk/public_html/libraries/gantry5/vendor/leafo/scssphp/src/Compiler.php:2408 #52 Leafo\ScssPhp\Compiler:compileChild in /home/setperk/public_html/libraries/gantry5/vendor/leafo/scssphp/src/Compiler.php:1690 #51 Leafo\ScssPhp\Compiler:compileChildrenNoReturn in /home/setperk/public_html/libraries/gantry5/vendor/leafo/scssphp/src/Compiler.php:1334 #50 Leafo\ScssPhp\Compiler:compileBlock in /home/setperk/public_html/libraries/gantry5/vendor/leafo/scssphp/src/Compiler.php:2098 #49 Leafo\ScssPhp\Compiler:compileChild in /home/setperk/public_html/libraries/gantry5/vendor/leafo/scssphp/src/Compiler.php:1690 #48 Leafo\ScssPhp\Compiler:compileChildrenNoReturn in /home/setperk/public_html/libraries/gantry5/vendor/leafo/scssphp/src/Compiler.php:1334 #47 Leafo\ScssPhp\Compiler:compileBlock in /home/setperk/public_html/libraries/gantry5/vendor/leafo/scssphp/src/Compiler.php:2098 #46 Leafo\ScssPhp\Compiler:compileChild in /home/setperk/public_html/libraries/gantry5/vendor/leafo/scssphp/src/Compiler.php:1690 #45 Leafo\ScssPhp\Compiler:compileChildrenNoReturn in /home/setperk/public_html/libraries/gantry5/vendor/leafo/scssphp/src/Compiler.php:1334 #44 Leafo\ScssPhp\Compiler:compileBlock in /home/setperk/public_html/libraries/gantry5/vendor/leafo/scssphp/src/Compiler.php:2098 #43 Leafo\ScssPhp\Compiler:compileChild in /home/setperk/public_html/libraries/gantry5/vendor/leafo/scssphp/src/Compiler.php:1690 #42 Leafo\ScssPhp\Compiler:compileChildrenNoReturn in /home/setperk/public_html/libraries/gantry5/classes/Gantry/Component/Stylesheet/Scss/Compiler.php:426 #41 Gantry\Component\Stylesheet\Scss\Compiler:importFile in /home/setperk/public_html/libraries/gantry5/vendor/leafo/scssphp/src/Compiler.php:2009 #40 Leafo\ScssPhp\Compiler:compileImport in /home/setperk/public_html/libraries/gantry5/vendor/leafo/scssphp/src/Compiler.php:2080 #39 Leafo\ScssPhp\Compiler:compileChild in /home/setperk/public_html/libraries/gantry5/vendor/leafo/scssphp/src/Compiler.php:1690 #38 Leafo\ScssPhp\Compiler:compileChildrenNoReturn in /home/setperk/public_html/libraries/gantry5/classes/Gantry/Component/Stylesheet/Scss/Compiler.php:426 #37 Gantry\Component\Stylesheet\Scss\Compiler:importFile in /home/setperk/public_html/libraries/gantry5/vendor/leafo/scssphp/src/Compiler.php:2009 #36 Leafo\ScssPhp\Compiler:compileImport in /home/setperk/public_html/libraries/gantry5/vendor/leafo/scssphp/src/Compiler.php:2080 #35 Leafo\ScssPhp\Compiler:compileChild in /home/setperk/public_html/libraries/gantry5/vendor/leafo/scssphp/src/Compiler.php:1690 #34 Leafo\ScssPhp\Compiler:compileChildrenNoReturn in /home/setperk/public_html/libraries/gantry5/vendor/leafo/scssphp/src/Compiler.php:399 #33 Leafo\ScssPhp\Compiler:compileRoot in /home/setperk/public_html/libraries/gantry5/vendor/leafo/scssphp/src/Compiler.php:253 #32 Leafo\ScssPhp\Compiler:compile in /home/setperk/public_html/libraries/gantry5/classes/Gantry/Component/Stylesheet/ScssCompiler.php:117 #31 Gantry\Component\Stylesheet\ScssCompiler:compileFile in /home/setperk/public_html/libraries/gantry5/classes/Gantry/Component/Theme/ThemeTrait.php:238 #30 Gantry\Framework\Theme:css in /home/setperk/public_html/libraries/gantry5/classes/Gantry/Component/Content/Block/HtmlBlock.php:85 #29 Gantry\Component\Content\Block\HtmlBlock:getStyles in /home/setperk/public_html/libraries/gantry5/classes/Gantry/Framework/Document.php:80 #28 Gantry\Framework\Document:registerStyles in /home/setperk/public_html/libraries/gantry5/classes/Gantry/Framework/Document.php:34 #27 Gantry\Framework\Document:registerAssets in /home/setperk/public_html/libraries/gantry5/classes/Gantry/Framework/Base/Platform.php:201 #26 Gantry\Framework\Base\Platform:finalize in /home/setperk/public_html/libraries/gantry5/vendor/twig/twig/src/Template.php:702 #25 Twig\Template:getAttribute in /home/setperk/public_html/cache/gantry5/rt_xenon/twig/43/43e92e0bf238c00fff688f06e849d6e7ba8fbaed507b874906e079beea149726.php:256 #24 __TwigTemplate_79256a8f363579c3cf6eb3a01c8d981a6a88a46ad4c9b5ee8f42847c685bcda9:block_page_footer in /home/setperk/public_html/libraries/gantry5/vendor/twig/twig/src/Template.php:216 #23 Twig\Template:displayBlock in /home/setperk/public_html/libraries/gantry5/vendor/twig/twig/src/Template.php:177 #22 Twig\Template:displayParentBlock in /home/setperk/public_html/cache/gantry5/rt_xenon/twig/f1/f1eff57cd0a40effcb1e5cd3f3bb844df3b6637a07d5f067522f600d351f294a.php:43 #21 __TwigTemplate_a0601540231e92cbc4b1556a3f91aa94ef8f91ffe5600cfe9c2aa1c31277d5f2:block_page_footer in /home/setperk/public_html/libraries/gantry5/vendor/twig/twig/src/Template.php:216 #20 Twig\Template:displayBlock in /home/setperk/public_html/cache/gantry5/rt_xenon/twig/43/43e92e0bf238c00fff688f06e849d6e7ba8fbaed507b874906e079beea149726.php:150 #19 __TwigTemplate_79256a8f363579c3cf6eb3a01c8d981a6a88a46ad4c9b5ee8f42847c685bcda9:doDisplay in /home/setperk/public_html/libraries/gantry5/vendor/twig/twig/src/Template.php:455 #18 Twig\Template:displayWithErrorHandling in /home/setperk/public_html/libraries/gantry5/vendor/twig/twig/src/Template.php:422 #17 Twig\Template:display in /home/setperk/public_html/cache/gantry5/rt_xenon/twig/f1/f1eff57cd0a40effcb1e5cd3f3bb844df3b6637a07d5f067522f600d351f294a.php:35 #16 __TwigTemplate_a0601540231e92cbc4b1556a3f91aa94ef8f91ffe5600cfe9c2aa1c31277d5f2:doDisplay in /home/setperk/public_html/libraries/gantry5/vendor/twig/twig/src/Template.php:455 #15 Twig\Template:displayWithErrorHandling in /home/setperk/public_html/libraries/gantry5/vendor/twig/twig/src/Template.php:422 #14 Twig\Template:display in /home/setperk/public_html/cache/gantry5/rt_xenon/twig/33/339e33588c15f4905f3654a351ef45d7104eb0b8e6511e1e79ad15dfed4da0c3.php:35 #13 __TwigTemplate_8ff964d951d1169061b31b85a43015650c6b4228ff60b9708adfa2c8c8a2a461:doDisplay in /home/setperk/public_html/libraries/gantry5/vendor/twig/twig/src/Template.php:455 #12 Twig\Template:displayWithErrorHandling in /home/setperk/public_html/libraries/gantry5/vendor/twig/twig/src/Template.php:422 #11 Twig\Template:display in /home/setperk/public_html/libraries/gantry5/vendor/twig/twig/src/Template.php:434 #10 Twig\Template:render in /home/setperk/public_html/libraries/gantry5/vendor/twig/twig/src/TemplateWrapper.php:47 #9 Twig\TemplateWrapper:render in /home/setperk/public_html/libraries/gantry5/vendor/twig/twig/src/Environment.php:384 #8 Twig\Environment:render in /home/setperk/public_html/libraries/gantry5/classes/Gantry/Component/Theme/AbstractTheme.php:163 #7 Gantry\Component\Theme\AbstractTheme:render in /home/setperk/public_html/templates/rt_xenon/index.php:24 #6 require in /home/setperk/public_html/libraries/src/Document/HtmlDocument.php:668 #5 Joomla\CMS\Document\HtmlDocument:_loadTemplate in /home/setperk/public_html/libraries/src/Document/HtmlDocument.php:730 #4 Joomla\CMS\Document\HtmlDocument:_fetchTemplate in /home/setperk/public_html/libraries/src/Document/HtmlDocument.php:545 #3 Joomla\CMS\Document\HtmlDocument:parse in /home/setperk/public_html/libraries/src/Application/CMSApplication.php:1104 #2 Joomla\CMS\Application\CMSApplication:render in /home/setperk/public_html/libraries/src/Application/SiteApplication.php:778 #1 Joomla\CMS\Application\SiteApplication:render in /home/setperk/public_html/libraries/src/Application/CMSApplication.php:209 #0 Joomla\CMS\Application\CMSApplication:execute in /home/setperk/public_html/index.php:49
Stack frames (68)
67
Twig\Error\RuntimeError
/home/setperk/public_html/media/gantry5/engines/nucleus/templates/page.html.twig73
66
Whoops\Exception\ErrorException
/vendor/leafo/scssphp/src/Compiler.php2556
65
Gantry\Component\Whoops\SystemFacade handleError
/vendor/leafo/scssphp/src/Compiler.php2556
64
Leafo\ScssPhp\Compiler reduce
/vendor/leafo/scssphp/src/Compiler.php4324
63
Leafo\ScssPhp\Compiler callNativeFunction
/vendor/leafo/scssphp/src/Compiler.php2755
62
Leafo\ScssPhp\Compiler fncall
/vendor/leafo/scssphp/src/Compiler.php2727
61
Leafo\ScssPhp\Compiler reduce
/vendor/leafo/scssphp/src/Compiler.php2127
60
Leafo\ScssPhp\Compiler compileChild
/vendor/leafo/scssphp/src/Compiler.php1654
59
Leafo\ScssPhp\Compiler compileChildren
/vendor/leafo/scssphp/src/Compiler.php2242
58
Leafo\ScssPhp\Compiler compileChild
/vendor/leafo/scssphp/src/Compiler.php1654
57
Leafo\ScssPhp\Compiler compileChildren
/vendor/leafo/scssphp/src/Compiler.php2212
56
Leafo\ScssPhp\Compiler compileChild
/vendor/leafo/scssphp/src/Compiler.php1654
55
Leafo\ScssPhp\Compiler compileChildren
/vendor/leafo/scssphp/src/Compiler.php2242
54
Leafo\ScssPhp\Compiler compileChild
/vendor/leafo/scssphp/src/Compiler.php1690
53
Leafo\ScssPhp\Compiler compileChildrenNoReturn
/vendor/leafo/scssphp/src/Compiler.php2408
52
Leafo\ScssPhp\Compiler compileChild
/vendor/leafo/scssphp/src/Compiler.php1690
51
Leafo\ScssPhp\Compiler compileChildrenNoReturn
/vendor/leafo/scssphp/src/Compiler.php1334
50
Leafo\ScssPhp\Compiler compileBlock
/vendor/leafo/scssphp/src/Compiler.php2098
49
Leafo\ScssPhp\Compiler compileChild
/vendor/leafo/scssphp/src/Compiler.php1690
48
Leafo\ScssPhp\Compiler compileChildrenNoReturn
/vendor/leafo/scssphp/src/Compiler.php1334
47
Leafo\ScssPhp\Compiler compileBlock
/vendor/leafo/scssphp/src/Compiler.php2098
46
Leafo\ScssPhp\Compiler compileChild
/vendor/leafo/scssphp/src/Compiler.php1690
45
Leafo\ScssPhp\Compiler compileChildrenNoReturn
/vendor/leafo/scssphp/src/Compiler.php1334
44
Leafo\ScssPhp\Compiler compileBlock
/vendor/leafo/scssphp/src/Compiler.php2098
43
Leafo\ScssPhp\Compiler compileChild
/vendor/leafo/scssphp/src/Compiler.php1690
42
Leafo\ScssPhp\Compiler compileChildrenNoReturn
/classes/Gantry/Component/Stylesheet/Scss/Compiler.php426
41
Gantry\Component\Stylesheet\Scss\Compiler importFile
/vendor/leafo/scssphp/src/Compiler.php2009
40
Leafo\ScssPhp\Compiler compileImport
/vendor/leafo/scssphp/src/Compiler.php2080
39
Leafo\ScssPhp\Compiler compileChild
/vendor/leafo/scssphp/src/Compiler.php1690
38
Leafo\ScssPhp\Compiler compileChildrenNoReturn
/classes/Gantry/Component/Stylesheet/Scss/Compiler.php426
37
Gantry\Component\Stylesheet\Scss\Compiler importFile
/vendor/leafo/scssphp/src/Compiler.php2009
36
Leafo\ScssPhp\Compiler compileImport
/vendor/leafo/scssphp/src/Compiler.php2080
35
Leafo\ScssPhp\Compiler compileChild
/vendor/leafo/scssphp/src/Compiler.php1690
34
Leafo\ScssPhp\Compiler compileChildrenNoReturn
/vendor/leafo/scssphp/src/Compiler.php399
33
Leafo\ScssPhp\Compiler compileRoot
/vendor/leafo/scssphp/src/Compiler.php253
32
Leafo\ScssPhp\Compiler compile
/classes/Gantry/Component/Stylesheet/ScssCompiler.php117
31
Gantry\Component\Stylesheet\ScssCompiler compileFile
/classes/Gantry/Component/Theme/ThemeTrait.php238
30
Gantry\Framework\Theme css
/classes/Gantry/Component/Content/Block/HtmlBlock.php85
29
Gantry\Component\Content\Block\HtmlBlock getStyles
/classes/Gantry/Framework/Document.php80
28
Gantry\Framework\Document registerStyles
/classes/Gantry/Framework/Document.php34
27
Gantry\Framework\Document registerAssets
/classes/Gantry/Framework/Base/Platform.php201
26
Gantry\Framework\Base\Platform finalize
/vendor/twig/twig/src/Template.php702
25
Twig\Template getAttribute
/home/setperk/public_html/cache/gantry5/rt_xenon/twig/43/43e92e0bf238c00fff688f06e849d6e7ba8fbaed507b874906e079beea149726.php256
24
__TwigTemplate_79256a8f363579c3cf6eb3a01c8d981a6a88a46ad4c9b5ee8f42847c685bcda9 block_page_footer
/vendor/twig/twig/src/Template.php216
23
Twig\Template displayBlock
/vendor/twig/twig/src/Template.php177
22
Twig\Template displayParentBlock
/home/setperk/public_html/cache/gantry5/rt_xenon/twig/f1/f1eff57cd0a40effcb1e5cd3f3bb844df3b6637a07d5f067522f600d351f294a.php43
21
__TwigTemplate_a0601540231e92cbc4b1556a3f91aa94ef8f91ffe5600cfe9c2aa1c31277d5f2 block_page_footer
/vendor/twig/twig/src/Template.php216
20
Twig\Template displayBlock
/home/setperk/public_html/cache/gantry5/rt_xenon/twig/43/43e92e0bf238c00fff688f06e849d6e7ba8fbaed507b874906e079beea149726.php150
19
__TwigTemplate_79256a8f363579c3cf6eb3a01c8d981a6a88a46ad4c9b5ee8f42847c685bcda9 doDisplay
/vendor/twig/twig/src/Template.php455
18
Twig\Template displayWithErrorHandling
/vendor/twig/twig/src/Template.php422
17
Twig\Template display
/home/setperk/public_html/cache/gantry5/rt_xenon/twig/f1/f1eff57cd0a40effcb1e5cd3f3bb844df3b6637a07d5f067522f600d351f294a.php35
16
__TwigTemplate_a0601540231e92cbc4b1556a3f91aa94ef8f91ffe5600cfe9c2aa1c31277d5f2 doDisplay
/vendor/twig/twig/src/Template.php455
15
Twig\Template displayWithErrorHandling
/vendor/twig/twig/src/Template.php422
14
Twig\Template display
/home/setperk/public_html/cache/gantry5/rt_xenon/twig/33/339e33588c15f4905f3654a351ef45d7104eb0b8e6511e1e79ad15dfed4da0c3.php35
13
__TwigTemplate_8ff964d951d1169061b31b85a43015650c6b4228ff60b9708adfa2c8c8a2a461 doDisplay
/vendor/twig/twig/src/Template.php455
12
Twig\Template displayWithErrorHandling
/vendor/twig/twig/src/Template.php422
11
Twig\Template display
/vendor/twig/twig/src/Template.php434
10
Twig\Template render
/vendor/twig/twig/src/TemplateWrapper.php47
9
Twig\TemplateWrapper render
/vendor/twig/twig/src/Environment.php384
8
Twig\Environment render
/classes/Gantry/Component/Theme/AbstractTheme.php163
7
Gantry\Component\Theme\AbstractTheme render
/home/setperk/public_html/templates/rt_xenon/index.php24
6
require
/home/setperk/public_html/libraries/src/Document/HtmlDocument.php668
5
Joomla\CMS\Document\HtmlDocument _loadTemplate
/home/setperk/public_html/libraries/src/Document/HtmlDocument.php730
4
Joomla\CMS\Document\HtmlDocument _fetchTemplate
/home/setperk/public_html/libraries/src/Document/HtmlDocument.php545
3
Joomla\CMS\Document\HtmlDocument parse
/home/setperk/public_html/libraries/src/Application/CMSApplication.php1104
2
Joomla\CMS\Application\CMSApplication render
/home/setperk/public_html/libraries/src/Application/SiteApplication.php778
1
Joomla\CMS\Application\SiteApplication render
/home/setperk/public_html/libraries/src/Application/CMSApplication.php209
0
Joomla\CMS\Application\CMSApplication execute
/home/setperk/public_html/index.php49
 
{%- set body_bottom %}
    {% block body_bottom %}
    {% endblock %}
    {{ gantry.document.getHtml('body_bottom')|join("\n    ")|raw }}
{% endset -%}
 
{%- do gantry.document.addScript(url('gantry-assets://js/main.js'), 11, 'footer') -%}
 
{# Head and footer needs to come last because of any of the above blocks may have CSS or JavaScript in them #}
 
{%- set page_head %}
    {% block page_head -%}
        {% include 'partials/page_head.html.twig' %}
    {%- endblock %}
{% endset -%}
 
{%- set page_footer %}
    {% block page_footer %}
        {% do gantry.platform.finalize() -%}
        {{ gantry.scripts('footer')|join("\n    ")|raw -}}
    {% endblock %}
 
    {{ gantry.debugger.render()|raw }}
{% endset -%}
 
{%- block page -%}
<!DOCTYPE {{ gantry.config.page.doctype|default('html')|raw }}>
<html{{ gantry.page.htmlAttributes|raw }}>
    {{ page_head|raw }}
    {% block page_body -%}
    <body{{ gantry.page.bodyAttributes({'class': [offcanvas_position, gantry.page.preset, 'g-style-' ~ gantry.theme.preset]})|raw }}>
        {{ gantry.config.page.body.body_top|raw }}
        {{ body_top|raw }}
        {{ page_offcanvas|raw }}
        <div id="g-page-surround">
            {% if page_offcanvas|trim -%}
            <div class="g-offcanvas-hide g-offcanvas-toggle" role="navigation" data-offcanvas-toggle aria-controls="g-offcanvas" aria-expanded="false"><i class="fa fa-fw fa-bars"></i></div>
            {%- endif %}
            {{ page_top|raw }}
            case Type::T_VARIABLE:
            case Type::T_FUNCTION_CALL:
                return true;
        }
 
        return false;
    }
 
    /**
     * Reduce value
     *
     * @param array   $value
     * @param boolean $inExp
     *
     * @return array|\Leafo\ScssPhp\Node\Number
     */
    protected function reduce($value, $inExp = false)
    {
 
        switch ($value[0]) {
            case Type::T_EXPRESSION:
                list(, $op, $left, $right, $inParens) = $value;
 
                $opName = isset(static::$operatorNames[$op]) ? static::$operatorNames[$op] : $op;
                $inExp = $inExp || $this->shouldEval($left) || $this->shouldEval($right);
 
                $left = $this->reduce($left, true);
 
                if ($op !== 'and' && $op !== 'or') {
                    $right = $this->reduce($right, true);
                }
 
                // special case: looks like css shorthand
                if ($opName == 'div' && ! $inParens && ! $inExp && isset($right[2])
                    && (($right[0] !== Type::T_NUMBER && $right[2] != '')
                    || ($right[0] === Type::T_NUMBER && ! $right->unitless()))
                ) {
                    return $this->expToString($value);
                }
 
Exception message: Trying to access array offset on value of type null
            case Type::T_VARIABLE:
            case Type::T_FUNCTION_CALL:
                return true;
        }
 
        return false;
    }
 
    /**
     * Reduce value
     *
     * @param array   $value
     * @param boolean $inExp
     *
     * @return array|\Leafo\ScssPhp\Node\Number
     */
    protected function reduce($value, $inExp = false)
    {
 
        switch ($value[0]) {
            case Type::T_EXPRESSION:
                list(, $op, $left, $right, $inParens) = $value;
 
                $opName = isset(static::$operatorNames[$op]) ? static::$operatorNames[$op] : $op;
                $inExp = $inExp || $this->shouldEval($left) || $this->shouldEval($right);
 
                $left = $this->reduce($left, true);
 
                if ($op !== 'and' && $op !== 'or') {
                    $right = $this->reduce($right, true);
                }
 
                // special case: looks like css shorthand
                if ($opName == 'div' && ! $inParens && ! $inExp && isset($right[2])
                    && (($right[0] !== Type::T_NUMBER && $right[2] != '')
                    || ($right[0] === Type::T_NUMBER && ! $right->unitless()))
                ) {
                    return $this->expToString($value);
                }
 
    protected function callNativeFunction($name, $args, &$returnValue)
    {
        // try a lib function
        $name = $this->normalizeName($name);
 
        if (isset($this->userFunctions[$name])) {
            // see if we can find a user function
            list($f, $prototype) = $this->userFunctions[$name];
        } elseif (($f = $this->getBuiltinFunction($name)) && is_callable($f)) {
            $libName   = $f[1];
            $prototype = isset(static::$$libName) ? static::$$libName : null;
        } else {
            return false;
        }
 
        @list($sorted, $kwargs) = $this->sortArgs($prototype, $args);
 
        if ($name !== 'if' && $name !== 'call') {
            foreach ($sorted as &$val) {
                $val = $this->reduce($val, true);
            }
        }
 
        $returnValue = call_user_func($f, $sorted, $kwargs);
 
        if (! isset($returnValue)) {
            return false;
        }
 
        $returnValue = $this->coerceValue($returnValue);
 
        return true;
    }
 
    /**
     * Get built-in function
     *
     * @param string $name Normalized name
     *
     * @return array
        }
    }
 
    /**
     * Function caller
     *
     * @param string $name
     * @param array  $argValues
     *
     * @return array|null
     */
    protected function fncall($name, $argValues)
    {
        // SCSS @function
        if ($this->callScssFunction($name, $argValues, $returnValue)) {
            return $returnValue;
        }
 
        // native PHP functions
        if ($this->callNativeFunction($name, $argValues, $returnValue)) {
            return $returnValue;
        }
 
        // for CSS functions, simply flatten the arguments into a list
        $listArgs = [];
 
        foreach ((array) $argValues as $arg) {
            if (empty($arg[0])) {
                $listArgs[] = $this->reduce($arg[1]);
            }
        }
 
        return [Type::T_FUNCTION, $name, [Type::T_LIST, ',', $listArgs]];
    }
 
    /**
     * Normalize name
     *
     * @param string $name
     *
 
            case Type::T_STRING:
                foreach ($value[2] as &$item) {
                    if (is_array($item) || $item instanceof \ArrayAccess) {
                        $item = $this->reduce($item);
                    }
                }
 
                return $value;
 
            case Type::T_INTERPOLATE:
                $value[1] = $this->reduce($value[1]);
                if ($inExp) {
                    return $value[1];
                }
 
                return $value;
 
            case Type::T_FUNCTION_CALL:
                return $this->fncall($value[1], $value[2]);
 
            case Type::T_SELF:
                $selfSelector = $this->multiplySelectors($this->env);
                $selfSelector = $this->collapseSelectors($selfSelector, true);
                return $selfSelector;
 
            default:
                return $value;
        }
    }
 
    /**
     * Function caller
     *
     * @param string $name
     * @param array  $argValues
     *
     * @return array|null
     */
    protected function fncall($name, $argValues)
 
            case Type::T_ASSIGN:
                list(, $name, $value) = $child;
 
                if ($name[0] === Type::T_VARIABLE) {
                    $flags = isset($child[3]) ? $child[3] : [];
                    $isDefault = in_array('!default', $flags);
                    $isGlobal = in_array('!global', $flags);
 
                    if ($isGlobal) {
                        $this->set($name[1], $this->reduce($value), false, $this->rootEnv, $value);
                        break;
                    }
 
                    $shouldSet = $isDefault &&
                        (($result = $this->get($name[1], false)) === null
                        || $result === static::$null);
 
                    if (! $isDefault || $shouldSet) {
                        $this->set($name[1], $this->reduce($value), true, null, $value);
                    }
                    break;
                }
 
                $compiledName = $this->compileValue($name);
 
                // handle shorthand syntax: size / line-height
                if ($compiledName === 'font' || $compiledName === 'grid-row' || $compiledName === 'grid-column') {
                    if ($value[0] === Type::T_VARIABLE) {
                        // if the font value comes from variable, the content is already reduced
                        // (i.e., formulas were already calculated), so we need the original unreduced value
                        $value = $this->get($value[1], true, null, true);
                    }
 
                    $fontValue=&$value;
 
                    if ($value[0] === Type::T_LIST && $value[1]==',') {
                        // this is the case if more than one font is given: example: "font: 400 1em/1.3 arial,helvetica"
                        // we need to handle the first list element
                        $fontValue=&$value[2][0];
    protected function popCallStack()
    {
        array_pop($this->callStack);
    }
 
    /**
     * Compile children and return result
     *
     * @param array                                $stms
     * @param \Leafo\ScssPhp\Formatter\OutputBlock $out
     * @param string                               $traceName
     *
     * @return array|null
     */
    protected function compileChildren($stms, OutputBlock $out, $traceName = '')
    {
        $this->pushCallStack($traceName);
 
        foreach ($stms as $stm) {
            $ret = $this->compileChild($stm, $out);
 
            if (isset($ret)) {
                return $ret;
            }
        }
 
        $this->popCallStack();
 
        return null;
    }
 
    /**
     * Compile children and throw exception if unexpected @return
     *
     * @param array                                $stms
     * @param \Leafo\ScssPhp\Formatter\OutputBlock $out
     * @param \Leafo\ScssPhp\Block                 $selfParent
     * @param string                               $traceName
     *
     * @throws \Exception
 
            case Type::T_EACH:
                list(, $each) = $child;
 
                $list = $this->coerceList($this->reduce($each->list));
 
                $this->pushEnv();
 
                foreach ($list[2] as $item) {
                    if (count($each->vars) === 1) {
                        $this->set($each->vars[0], $item, true);
                    } else {
                        list(,, $values) = $this->coerceList($item);
 
                        foreach ($each->vars as $i => $var) {
                            $this->set($var, isset($values[$i]) ? $values[$i] : static::$null, true);
                        }
                    }
 
                    $ret = $this->compileChildren($each->children, $out);
 
                    if ($ret) {
                        if ($ret[0] !== Type::T_CONTROL) {
                            $this->popEnv();
 
                            return $ret;
                        }
 
                        if ($ret[1]) {
                            break;
                        }
                    }
                }
 
                $this->popEnv();
                break;
 
            case Type::T_WHILE:
                list(, $while) = $child;
 
    protected function popCallStack()
    {
        array_pop($this->callStack);
    }
 
    /**
     * Compile children and return result
     *
     * @param array                                $stms
     * @param \Leafo\ScssPhp\Formatter\OutputBlock $out
     * @param string                               $traceName
     *
     * @return array|null
     */
    protected function compileChildren($stms, OutputBlock $out, $traceName = '')
    {
        $this->pushCallStack($traceName);
 
        foreach ($stms as $stm) {
            $ret = $this->compileChild($stm, $out);
 
            if (isset($ret)) {
                return $ret;
            }
        }
 
        $this->popCallStack();
 
        return null;
    }
 
    /**
     * Compile children and throw exception if unexpected @return
     *
     * @param array                                $stms
     * @param \Leafo\ScssPhp\Formatter\OutputBlock $out
     * @param \Leafo\ScssPhp\Block                 $selfParent
     * @param string                               $traceName
     *
     * @throws \Exception
                break;
 
            case Type::T_EXTEND:
                foreach ($child[1] as $sel) {
                    $results = $this->evalSelectors([$sel]);
 
                    foreach ($results as $result) {
                        // only use the first one
                        $result = current($result);
 
                        $this->pushExtends($result, $out->selectors, $child);
                    }
                }
                break;
 
            case Type::T_IF:
                list(, $if) = $child;
 
                if ($this->isTruthy($this->reduce($if->cond, true))) {
                    return $this->compileChildren($if->children, $out);
                }
 
                foreach ($if->cases as $case) {
                    if ($case->type === Type::T_ELSE ||
                        $case->type === Type::T_ELSEIF && $this->isTruthy($this->reduce($case->cond))
                    ) {
                        return $this->compileChildren($case->children, $out);
                    }
                }
                break;
 
            case Type::T_EACH:
                list(, $each) = $child;
 
                $list = $this->coerceList($this->reduce($each->list));
 
                $this->pushEnv();
 
                foreach ($list[2] as $item) {
                    if (count($each->vars) === 1) {
    protected function popCallStack()
    {
        array_pop($this->callStack);
    }
 
    /**
     * Compile children and return result
     *
     * @param array                                $stms
     * @param \Leafo\ScssPhp\Formatter\OutputBlock $out
     * @param string                               $traceName
     *
     * @return array|null
     */
    protected function compileChildren($stms, OutputBlock $out, $traceName = '')
    {
        $this->pushCallStack($traceName);
 
        foreach ($stms as $stm) {
            $ret = $this->compileChild($stm, $out);
 
            if (isset($ret)) {
                return $ret;
            }
        }
 
        $this->popCallStack();
 
        return null;
    }
 
    /**
     * Compile children and throw exception if unexpected @return
     *
     * @param array                                $stms
     * @param \Leafo\ScssPhp\Formatter\OutputBlock $out
     * @param \Leafo\ScssPhp\Block                 $selfParent
     * @param string                               $traceName
     *
     * @throws \Exception
 
            case Type::T_EACH:
                list(, $each) = $child;
 
                $list = $this->coerceList($this->reduce($each->list));
 
                $this->pushEnv();
 
                foreach ($list[2] as $item) {
                    if (count($each->vars) === 1) {
                        $this->set($each->vars[0], $item, true);
                    } else {
                        list(,, $values) = $this->coerceList($item);
 
                        foreach ($each->vars as $i => $var) {
                            $this->set($var, isset($values[$i]) ? $values[$i] : static::$null, true);
                        }
                    }
 
                    $ret = $this->compileChildren($each->children, $out);
 
                    if ($ret) {
                        if ($ret[0] !== Type::T_CONTROL) {
                            $this->popEnv();
 
                            return $ret;
                        }
 
                        if ($ret[1]) {
                            break;
                        }
                    }
                }
 
                $this->popEnv();
                break;
 
            case Type::T_WHILE:
                list(, $while) = $child;
 
     * @param \Leafo\ScssPhp\Block                 $selfParent
     * @param string                               $traceName
     *
     * @throws \Exception
     */
    protected function compileChildrenNoReturn($stms, OutputBlock $out, $selfParent = null, $traceName = '')
    {
        $this->pushCallStack($traceName);
 
        foreach ($stms as $stm) {
            if ($selfParent && isset($stm[1]) && is_object($stm[1]) && $stm[1] instanceof Block) {
                $stm[1]->selfParent = $selfParent;
                $ret = $this->compileChild($stm, $out);
                $stm[1]->selfParent = null;
            } elseif ($selfParent && $stm[0] === TYPE::T_INCLUDE) {
                $stm['selfParent'] = $selfParent;
                $ret = $this->compileChild($stm, $out);
                unset($stm['selfParent']);
            } else {
                $ret = $this->compileChild($stm, $out);
            }
 
            if (isset($ret)) {
                $this->throwError('@return may only be used within a function');
 
                return;
            }
        }
 
        $this->popCallStack();
    }
 
 
    /**
     * evaluate media query : compile internal value keeping the structure inchanged
     *
     * @param array $queryList
     *
     * @return array
     */
                        }
                    }
                }
 
                // clone the stored content to not have its scope spoiled by a further call to the same mixin
                // i.e., recursive @include of the same mixin
                if (isset($content)) {
                    $copyContent = clone $content;
                    $copyContent->scope = $callingScope;
 
                    $this->setRaw(static::$namespaces['special'] . 'content', $copyContent, $this->env);
                }
 
                if (isset($mixin->args)) {
                    $this->applyArguments($mixin->args, $argValues);
                }
 
                $this->env->marker = 'mixin';
 
                $this->compileChildrenNoReturn($mixin->children, $out, $selfParent, $this->env->marker . " " . $name);
 
                $this->storeEnv = $storeEnv;
 
                $this->popEnv();
                break;
 
            case Type::T_MIXIN_CONTENT:
                $env = isset($this->storeEnv) ? $this->storeEnv : $this->env;
                $content = $this->get(static::$namespaces['special'] . 'content', false, $env);
 
                if (! $content) {
                    $content = new \stdClass();
                    $content->scope = new \stdClass();
                    $content->children = $this->storeEnv->parent->block->children;
                    break;
                }
 
                $storeEnv = $this->storeEnv;
                $this->storeEnv = $content->scope;
                $this->compileChildrenNoReturn($content->children, $out);
     * @param \Leafo\ScssPhp\Block                 $selfParent
     * @param string                               $traceName
     *
     * @throws \Exception
     */
    protected function compileChildrenNoReturn($stms, OutputBlock $out, $selfParent = null, $traceName = '')
    {
        $this->pushCallStack($traceName);
 
        foreach ($stms as $stm) {
            if ($selfParent && isset($stm[1]) && is_object($stm[1]) && $stm[1] instanceof Block) {
                $stm[1]->selfParent = $selfParent;
                $ret = $this->compileChild($stm, $out);
                $stm[1]->selfParent = null;
            } elseif ($selfParent && $stm[0] === TYPE::T_INCLUDE) {
                $stm['selfParent'] = $selfParent;
                $ret = $this->compileChild($stm, $out);
                unset($stm['selfParent']);
            } else {
                $ret = $this->compileChild($stm, $out);
            }
 
            if (isset($ret)) {
                $this->throwError('@return may only be used within a function');
 
                return;
            }
        }
 
        $this->popCallStack();
    }
 
 
    /**
     * evaluate media query : compile internal value keeping the structure inchanged
     *
     * @param array $queryList
     *
     * @return array
     */
                    break;
            }
 
            $this->scope->children[] = $annotation;
        }
 
        $this->scope->children[] = $out;
 
        if (count($block->children)) {
            $out->selectors = $this->multiplySelectors($env, $block->selfParent);
 
            // propagate selfParent to the children where they still can be useful
            $selfParentSelectors = null;
 
            if (isset($block->selfParent->selectors)) {
                $selfParentSelectors = $block->selfParent->selectors;
                $block->selfParent->selectors = $out->selectors;
            }
 
            $this->compileChildrenNoReturn($block->children, $out, $block->selfParent);
 
            // and revert for the following childs of the same block
            if ($selfParentSelectors) {
                $block->selfParent->selectors = $selfParentSelectors;
            }
        }
 
        $this->formatter->stripSemicolon($out->lines);
 
        $this->popEnv();
    }
 
    /**
     * Compile root level comment
     *
     * @param array $block
     */
    protected function compileComment($block)
    {
        $out = $this->makeOutputBlock(Type::T_COMMENT);
 
                if (! $this->compileImport($rawPath, $out)) {
                    $out->lines[] = '@import ' . $this->compileValue($rawPath) . ';';
                }
                break;
 
            case Type::T_DIRECTIVE:
                $this->compileDirective($child[1]);
                break;
 
            case Type::T_AT_ROOT:
                $this->compileAtRoot($child[1]);
                break;
 
            case Type::T_MEDIA:
                $this->compileMedia($child[1]);
                break;
 
            case Type::T_BLOCK:
                $this->compileBlock($child[1]);
                break;
 
            case Type::T_CHARSET:
                if (! $this->charsetSeen) {
                    $this->charsetSeen = true;
 
                    $out->lines[] = '@charset ' . $this->compileValue($child[1]) . ';';
                }
                break;
 
            case Type::T_ASSIGN:
                list(, $name, $value) = $child;
 
                if ($name[0] === Type::T_VARIABLE) {
                    $flags = isset($child[3]) ? $child[3] : [];
                    $isDefault = in_array('!default', $flags);
                    $isGlobal = in_array('!global', $flags);
 
                    if ($isGlobal) {
                        $this->set($name[1], $this->reduce($value), false, $this->rootEnv, $value);
     * @param \Leafo\ScssPhp\Block                 $selfParent
     * @param string                               $traceName
     *
     * @throws \Exception
     */
    protected function compileChildrenNoReturn($stms, OutputBlock $out, $selfParent = null, $traceName = '')
    {
        $this->pushCallStack($traceName);
 
        foreach ($stms as $stm) {
            if ($selfParent && isset($stm[1]) && is_object($stm[1]) && $stm[1] instanceof Block) {
                $stm[1]->selfParent = $selfParent;
                $ret = $this->compileChild($stm, $out);
                $stm[1]->selfParent = null;
            } elseif ($selfParent && $stm[0] === TYPE::T_INCLUDE) {
                $stm['selfParent'] = $selfParent;
                $ret = $this->compileChild($stm, $out);
                unset($stm['selfParent']);
            } else {
                $ret = $this->compileChild($stm, $out);
            }
 
            if (isset($ret)) {
                $this->throwError('@return may only be used within a function');
 
                return;
            }
        }
 
        $this->popCallStack();
    }
 
 
    /**
     * evaluate media query : compile internal value keeping the structure inchanged
     *
     * @param array $queryList
     *
     * @return array
     */
                    break;
            }
 
            $this->scope->children[] = $annotation;
        }
 
        $this->scope->children[] = $out;
 
        if (count($block->children)) {
            $out->selectors = $this->multiplySelectors($env, $block->selfParent);
 
            // propagate selfParent to the children where they still can be useful
            $selfParentSelectors = null;
 
            if (isset($block->selfParent->selectors)) {
                $selfParentSelectors = $block->selfParent->selectors;
                $block->selfParent->selectors = $out->selectors;
            }
 
            $this->compileChildrenNoReturn($block->children, $out, $block->selfParent);
 
            // and revert for the following childs of the same block
            if ($selfParentSelectors) {
                $block->selfParent->selectors = $selfParentSelectors;
            }
        }
 
        $this->formatter->stripSemicolon($out->lines);
 
        $this->popEnv();
    }
 
    /**
     * Compile root level comment
     *
     * @param array $block
     */
    protected function compileComment($block)
    {
        $out = $this->makeOutputBlock(Type::T_COMMENT);
 
                if (! $this->compileImport($rawPath, $out)) {
                    $out->lines[] = '@import ' . $this->compileValue($rawPath) . ';';
                }
                break;
 
            case Type::T_DIRECTIVE:
                $this->compileDirective($child[1]);
                break;
 
            case Type::T_AT_ROOT:
                $this->compileAtRoot($child[1]);
                break;
 
            case Type::T_MEDIA:
                $this->compileMedia($child[1]);
                break;
 
            case Type::T_BLOCK:
                $this->compileBlock($child[1]);
                break;
 
            case Type::T_CHARSET:
                if (! $this->charsetSeen) {
                    $this->charsetSeen = true;
 
                    $out->lines[] = '@charset ' . $this->compileValue($child[1]) . ';';
                }
                break;
 
            case Type::T_ASSIGN:
                list(, $name, $value) = $child;
 
                if ($name[0] === Type::T_VARIABLE) {
                    $flags = isset($child[3]) ? $child[3] : [];
                    $isDefault = in_array('!default', $flags);
                    $isGlobal = in_array('!global', $flags);
 
                    if ($isGlobal) {
                        $this->set($name[1], $this->reduce($value), false, $this->rootEnv, $value);
     * @param \Leafo\ScssPhp\Block                 $selfParent
     * @param string                               $traceName
     *
     * @throws \Exception
     */
    protected function compileChildrenNoReturn($stms, OutputBlock $out, $selfParent = null, $traceName = '')
    {
        $this->pushCallStack($traceName);
 
        foreach ($stms as $stm) {
            if ($selfParent && isset($stm[1]) && is_object($stm[1]) && $stm[1] instanceof Block) {
                $stm[1]->selfParent = $selfParent;
                $ret = $this->compileChild($stm, $out);
                $stm[1]->selfParent = null;
            } elseif ($selfParent && $stm[0] === TYPE::T_INCLUDE) {
                $stm['selfParent'] = $selfParent;
                $ret = $this->compileChild($stm, $out);
                unset($stm['selfParent']);
            } else {
                $ret = $this->compileChild($stm, $out);
            }
 
            if (isset($ret)) {
                $this->throwError('@return may only be used within a function');
 
                return;
            }
        }
 
        $this->popCallStack();
    }
 
 
    /**
     * evaluate media query : compile internal value keeping the structure inchanged
     *
     * @param array $queryList
     *
     * @return array
     */
                    break;
            }
 
            $this->scope->children[] = $annotation;
        }
 
        $this->scope->children[] = $out;
 
        if (count($block->children)) {
            $out->selectors = $this->multiplySelectors($env, $block->selfParent);
 
            // propagate selfParent to the children where they still can be useful
            $selfParentSelectors = null;
 
            if (isset($block->selfParent->selectors)) {
                $selfParentSelectors = $block->selfParent->selectors;
                $block->selfParent->selectors = $out->selectors;
            }
 
            $this->compileChildrenNoReturn($block->children, $out, $block->selfParent);
 
            // and revert for the following childs of the same block
            if ($selfParentSelectors) {
                $block->selfParent->selectors = $selfParentSelectors;
            }
        }
 
        $this->formatter->stripSemicolon($out->lines);
 
        $this->popEnv();
    }
 
    /**
     * Compile root level comment
     *
     * @param array $block
     */
    protected function compileComment($block)
    {
        $out = $this->makeOutputBlock(Type::T_COMMENT);
 
                if (! $this->compileImport($rawPath, $out)) {
                    $out->lines[] = '@import ' . $this->compileValue($rawPath) . ';';
                }
                break;
 
            case Type::T_DIRECTIVE:
                $this->compileDirective($child[1]);
                break;
 
            case Type::T_AT_ROOT:
                $this->compileAtRoot($child[1]);
                break;
 
            case Type::T_MEDIA:
                $this->compileMedia($child[1]);
                break;
 
            case Type::T_BLOCK:
                $this->compileBlock($child[1]);
                break;
 
            case Type::T_CHARSET:
                if (! $this->charsetSeen) {
                    $this->charsetSeen = true;
 
                    $out->lines[] = '@charset ' . $this->compileValue($child[1]) . ';';
                }
                break;
 
            case Type::T_ASSIGN:
                list(, $name, $value) = $child;
 
                if ($name[0] === Type::T_VARIABLE) {
                    $flags = isset($child[3]) ? $child[3] : [];
                    $isDefault = in_array('!default', $flags);
                    $isGlobal = in_array('!global', $flags);
 
                    if ($isGlobal) {
                        $this->set($name[1], $this->reduce($value), false, $this->rootEnv, $value);
     * @param \Leafo\ScssPhp\Block                 $selfParent
     * @param string                               $traceName
     *
     * @throws \Exception
     */
    protected function compileChildrenNoReturn($stms, OutputBlock $out, $selfParent = null, $traceName = '')
    {
        $this->pushCallStack($traceName);
 
        foreach ($stms as $stm) {
            if ($selfParent && isset($stm[1]) && is_object($stm[1]) && $stm[1] instanceof Block) {
                $stm[1]->selfParent = $selfParent;
                $ret = $this->compileChild($stm, $out);
                $stm[1]->selfParent = null;
            } elseif ($selfParent && $stm[0] === TYPE::T_INCLUDE) {
                $stm['selfParent'] = $selfParent;
                $ret = $this->compileChild($stm, $out);
                unset($stm['selfParent']);
            } else {
                $ret = $this->compileChild($stm, $out);
            }
 
            if (isset($ret)) {
                $this->throwError('@return may only be used within a function');
 
                return;
            }
        }
 
        $this->popCallStack();
    }
 
 
    /**
     * evaluate media query : compile internal value keeping the structure inchanged
     *
     * @param array $queryList
     *
     * @return array
     */
        $locator = Gantry::instance()['locator'];
 
        // see if tree is cached
        $realPath = $locator($path);
 
        if (isset($this->importCache[$realPath])) {
            $this->handleImportLoop($realPath);
 
            $tree = $this->importCache[$realPath];
        } else {
            $code   = file_get_contents($realPath);
            $parser = $this->parserFactory($path);
            $tree   = $parser->parse($code);
 
            $this->importCache[$realPath] = $tree;
        }
 
        $dirname = dirname($path);
        array_unshift($this->importPaths, $dirname);
        $this->compileChildrenNoReturn($tree->children, $out);
        array_shift($this->importPaths);
    }
}
 
        return [empty($m1)? $m2 : $m1, $t1];
    }
 
    /**
     * Compile import; returns true if the value was something that could be imported
     *
     * @param array                                $rawPath
     * @param \Leafo\ScssPhp\Formatter\OutputBlock $out
     * @param boolean                              $once
     *
     * @return boolean
     */
    protected function compileImport($rawPath, OutputBlock $out, $once = false)
    {
        if ($rawPath[0] === Type::T_STRING) {
            $path = $this->compileStringContent($rawPath);
 
            if ($path = $this->findImport($path)) {
                if (! $once || ! in_array($path, $this->importedFiles)) {
                    $this->importFile($path, $out);
                    $this->importedFiles[] = $path;
                }
 
                return true;
            }
 
            return false;
        }
 
        if ($rawPath[0] === Type::T_LIST) {
            // handle a list of strings
            if (count($rawPath[2]) === 0) {
                return false;
            }
 
            foreach ($rawPath[2] as $path) {
                if ($path[0] !== Type::T_STRING) {
                    return false;
                }
            }
            $this->sourceIndex = array_search($out->sourceName, $this->sourceNames);
 
            if ($this->sourceIndex === false) {
                $this->sourceIndex = null;
            }
        }
 
        switch ($child[0]) {
            case Type::T_SCSSPHP_IMPORT_ONCE:
                $rawPath = $this->reduce($child[1]);
 
                if (! $this->compileImport($rawPath, $out, true)) {
                    $out->lines[] = '@import ' . $this->compileValue($rawPath) . ';';
                }
                break;
 
            case Type::T_IMPORT:
                $rawPath = $this->reduce($child[1]);
 
                if (! $this->compileImport($rawPath, $out)) {
                    $out->lines[] = '@import ' . $this->compileValue($rawPath) . ';';
                }
                break;
 
            case Type::T_DIRECTIVE:
                $this->compileDirective($child[1]);
                break;
 
            case Type::T_AT_ROOT:
                $this->compileAtRoot($child[1]);
                break;
 
            case Type::T_MEDIA:
                $this->compileMedia($child[1]);
                break;
 
            case Type::T_BLOCK:
                $this->compileBlock($child[1]);
                break;
 
     * @param \Leafo\ScssPhp\Block                 $selfParent
     * @param string                               $traceName
     *
     * @throws \Exception
     */
    protected function compileChildrenNoReturn($stms, OutputBlock $out, $selfParent = null, $traceName = '')
    {
        $this->pushCallStack($traceName);
 
        foreach ($stms as $stm) {
            if ($selfParent && isset($stm[1]) && is_object($stm[1]) && $stm[1] instanceof Block) {
                $stm[1]->selfParent = $selfParent;
                $ret = $this->compileChild($stm, $out);
                $stm[1]->selfParent = null;
            } elseif ($selfParent && $stm[0] === TYPE::T_INCLUDE) {
                $stm['selfParent'] = $selfParent;
                $ret = $this->compileChild($stm, $out);
                unset($stm['selfParent']);
            } else {
                $ret = $this->compileChild($stm, $out);
            }
 
            if (isset($ret)) {
                $this->throwError('@return may only be used within a function');
 
                return;
            }
        }
 
        $this->popCallStack();
    }
 
 
    /**
     * evaluate media query : compile internal value keeping the structure inchanged
     *
     * @param array $queryList
     *
     * @return array
     */
        $locator = Gantry::instance()['locator'];
 
        // see if tree is cached
        $realPath = $locator($path);
 
        if (isset($this->importCache[$realPath])) {
            $this->handleImportLoop($realPath);
 
            $tree = $this->importCache[$realPath];
        } else {
            $code   = file_get_contents($realPath);
            $parser = $this->parserFactory($path);
            $tree   = $parser->parse($code);
 
            $this->importCache[$realPath] = $tree;
        }
 
        $dirname = dirname($path);
        array_unshift($this->importPaths, $dirname);
        $this->compileChildrenNoReturn($tree->children, $out);
        array_shift($this->importPaths);
    }
}
 
        return [empty($m1)? $m2 : $m1, $t1];
    }
 
    /**
     * Compile import; returns true if the value was something that could be imported
     *
     * @param array                                $rawPath
     * @param \Leafo\ScssPhp\Formatter\OutputBlock $out
     * @param boolean                              $once
     *
     * @return boolean
     */
    protected function compileImport($rawPath, OutputBlock $out, $once = false)
    {
        if ($rawPath[0] === Type::T_STRING) {
            $path = $this->compileStringContent($rawPath);
 
            if ($path = $this->findImport($path)) {
                if (! $once || ! in_array($path, $this->importedFiles)) {
                    $this->importFile($path, $out);
                    $this->importedFiles[] = $path;
                }
 
                return true;
            }
 
            return false;
        }
 
        if ($rawPath[0] === Type::T_LIST) {
            // handle a list of strings
            if (count($rawPath[2]) === 0) {
                return false;
            }
 
            foreach ($rawPath[2] as $path) {
                if ($path[0] !== Type::T_STRING) {
                    return false;
                }
            }
            $this->sourceIndex = array_search($out->sourceName, $this->sourceNames);
 
            if ($this->sourceIndex === false) {
                $this->sourceIndex = null;
            }
        }
 
        switch ($child[0]) {
            case Type::T_SCSSPHP_IMPORT_ONCE:
                $rawPath = $this->reduce($child[1]);
 
                if (! $this->compileImport($rawPath, $out, true)) {
                    $out->lines[] = '@import ' . $this->compileValue($rawPath) . ';';
                }
                break;
 
            case Type::T_IMPORT:
                $rawPath = $this->reduce($child[1]);
 
                if (! $this->compileImport($rawPath, $out)) {
                    $out->lines[] = '@import ' . $this->compileValue($rawPath) . ';';
                }
                break;
 
            case Type::T_DIRECTIVE:
                $this->compileDirective($child[1]);
                break;
 
            case Type::T_AT_ROOT:
                $this->compileAtRoot($child[1]);
                break;
 
            case Type::T_MEDIA:
                $this->compileMedia($child[1]);
                break;
 
            case Type::T_BLOCK:
                $this->compileBlock($child[1]);
                break;
 
     * @param \Leafo\ScssPhp\Block                 $selfParent
     * @param string                               $traceName
     *
     * @throws \Exception
     */
    protected function compileChildrenNoReturn($stms, OutputBlock $out, $selfParent = null, $traceName = '')
    {
        $this->pushCallStack($traceName);
 
        foreach ($stms as $stm) {
            if ($selfParent && isset($stm[1]) && is_object($stm[1]) && $stm[1] instanceof Block) {
                $stm[1]->selfParent = $selfParent;
                $ret = $this->compileChild($stm, $out);
                $stm[1]->selfParent = null;
            } elseif ($selfParent && $stm[0] === TYPE::T_INCLUDE) {
                $stm['selfParent'] = $selfParent;
                $ret = $this->compileChild($stm, $out);
                unset($stm['selfParent']);
            } else {
                $ret = $this->compileChild($stm, $out);
            }
 
            if (isset($ret)) {
                $this->throwError('@return may only be used within a function');
 
                return;
            }
        }
 
        $this->popCallStack();
    }
 
 
    /**
     * evaluate media query : compile internal value keeping the structure inchanged
     *
     * @param array $queryList
     *
     * @return array
     */
            $out->sourceColumn = $this->env->block->sourceColumn;
        } else {
            $out->sourceName   = null;
            $out->sourceLine   = null;
            $out->sourceColumn = null;
        }
 
        return $out;
    }
 
    /**
     * Compile root
     *
     * @param \Leafo\ScssPhp\Block $rootBlock
     */
    protected function compileRoot(Block $rootBlock)
    {
        $this->rootBlock = $this->scope = $this->makeOutputBlock(Type::T_ROOT);
 
        $this->compileChildrenNoReturn($rootBlock->children, $this->scope);
        $this->flattenSelectors($this->scope);
        $this->missingSelectors();
    }
 
    /**
     * Report missing selectors
     */
    protected function missingSelectors()
    {
        foreach ($this->extends as $extend) {
            if (isset($extend[3])) {
                continue;
            }
 
            list($target, $origin, $block) = $extend;
 
            // ignore if !optional
            if ($block[2]) {
                continue;
            }
        $this->sourceIndex    = null;
        $this->sourceLine     = null;
        $this->sourceColumn   = null;
        $this->env            = null;
        $this->scope          = null;
        $this->storeEnv       = null;
        $this->charsetSeen    = null;
        $this->shouldEvaluate = null;
        $this->stderr         = fopen('php://stderr', 'w');
 
        $this->parser = $this->parserFactory($path);
        $tree = $this->parser->parse($code);
        $this->parser = null;
 
        $this->formatter = new $this->formatter();
        $this->rootBlock = null;
        $this->rootEnv   = $this->pushEnv($tree);
 
        $this->injectVariables($this->registeredVars);
        $this->compileRoot($tree);
        $this->popEnv();
 
        $sourceMapGenerator = null;
 
        if ($this->sourceMap) {
            if (is_object($this->sourceMap) && $this->sourceMap instanceof SourceMapGenerator) {
                $sourceMapGenerator = $this->sourceMap;
                $this->sourceMap = self::SOURCE_MAP_FILE;
            } elseif ($this->sourceMap !== self::SOURCE_MAP_NONE) {
                $sourceMapGenerator = new SourceMapGenerator($this->sourceMapOptions);
            }
        }
 
        $out = $this->formatter->format($this->scope, $sourceMapGenerator);
 
        if (! empty($out) && $this->sourceMap && $this->sourceMap !== self::SOURCE_MAP_NONE) {
            $sourceMap    = $sourceMapGenerator->generateJson();
            $sourceMapUrl = null;
 
            switch ($this->sourceMap) {
        try {
            $file->lock(false);
        } catch (\Exception $e) {
            // Another process has locked the file; we will check this in a bit.
        }
 
        if ($file->locked() === false) {
            // File was already locked by another process, lets avoid compiling the same file twice.
            return false;
        }
 
        // Set the lookup paths.
        $this->compiler->setBasePath($path);
        $this->compiler->setImportPaths([[$this, 'findImport']]);
 
        // Run the compiler.
        $this->compiler->setVariables($this->getVariables());
        $scss = '@import "' . $in . '.scss"';
        try {
            $css = $this->compiler->compile($scss);
        } catch (CompilerException $e) {
            throw new \RuntimeException("CSS Compilation on file '{$in}.scss' failed on error: {$e->getMessage()}", 500, $e);
        }
        if (strpos($css, $scss) === 0) {
            $css = '/* ' . $scss . ' */';
        }
 
        // Extract map from css and save it as separate file.
        if ($pos = strrpos($css, '/*# sourceMappingURL=')) {
            $map = json_decode(urldecode(substr($css, $pos + 43, -3)), true);
 
            /** @var Document $document */
            $document = $gantry['document'];
 
            foreach ($map['sources'] as &$source) {
                $source = $document->url($source, null, -1);
            }
            unset($source);
 
            $mapFile = JsonFile::instance($path . '.map');
        return $this->compiler->reset();
    }
 
    /**
     * Returns URL to CSS file.
     *
     * If file does not exist, it will be created by using CSS compiler.
     *
     * @param string $name
     * @return string
     */
    public function css($name)
    {
        if (!isset($this->cssCache[$name])) {
            $compiler = $this->compiler();
 
            if ($compiler->needsCompile($name, [$this, 'getCssVariables'])) {
                GANTRY_DEBUGGER && \Gantry\Debugger::startTimer("css-{$name}", "Compiling CSS: {$name}") && \Gantry\Debugger::addMessage("Compiling CSS: {$name}");
 
                $compiler->compileFile($name);
 
                GANTRY_DEBUGGER && \Gantry\Debugger::stopTimer("css-{$name}");
            }
 
            $this->cssCache[$name] = $compiler->getCssUrl($name);
        }
 
        return $this->cssCache[$name];
    }
 
    public function getCssVariables()
    {
        if ($this->preset) {
            $variables = $this->presets()->flatten($this->preset . '.styles', '-');
        } else {
            $gantry = self::gantry();
            $variables = $gantry['config']->flatten('styles', '-');
        }
 
        return $variables;
        $styles = $this->getAssetsInLocation('styles', $location);
 
        if (!$styles) {
            return [];
        }
 
        $gantry = Gantry::instance();
 
        /** @var Theme $theme */
        $theme = isset($gantry['theme']) ? $gantry['theme'] : null;
 
        /** @var Document $document */
        $document = $gantry['document'];
 
        foreach ($styles as $key => $style) {
            if (isset($style['href'])) {
                $url = $style['href'];
                if ($theme && preg_match('|\.scss$|', $url)) {
                    // Compile SCSS files.
                    $url = $theme->css(basename($url, '.scss'));
                }
                // Deal with streams and relative paths.
                $url = $document->url($url, false, null, false);
 
                $styles[$key]['href'] = $url;
            }
        }
 
        return $styles;
    }
 
    /**
     * @param string $location
     * @return array
     * @since 5.4.3
     */
    public function getScripts($location = 'head')
    {
        $scripts = $this->getAssetsInLocation('scripts', $location);
 
    public static function errorPage($new = null)
    {
        static $error = false;
 
        if (isset($new)) {
            $error = (bool) $new;
        }
 
        return $error;
    }
 
    protected static function registerStyles()
    {
        if (static::errorPage()) {
            return;
        }
 
        $doc = \JFactory::getDocument();
 
        $styles = static::$stack[0]->getStyles();
 
        foreach ($styles as $style) {
            switch ($style[':type']) {
                case 'file':
                    $doc->addStyleSheet($style['href'], $style['type'], $style['media'], $style['element']);
                    break;
                case 'inline':
                    $doc->addStyleDeclaration($style['content'], $style['type']);
                    break;
            }
        }
    }
 
    protected static function registerScripts()
    {
        if (static::errorPage()) {
            return;
        }
 
        $doc = \JFactory::getDocument();
class Document extends HtmlDocument
{
    protected static $availableFrameworks = [
        'jquery' => 'registerJquery',
        'jquery.framework' => 'registerJquery',
        'jquery.ui.core' => 'registerJqueryUiCore',
        'jquery.ui.sortable' => 'registerJqueryUiSortable',
        'bootstrap.2' => 'registerBootstrap2',
        'mootools' => 'registerMootools',
        'mootools.framework' => 'registerMootools',
        'mootools.core' => 'registerMootools',
        'mootools.more' => 'registerMootoolsMore',
        'lightcase' => 'registerLightcase',
        'lightcase.init' => 'registerLightcaseInit',
    ];
 
    public static function registerAssets()
    {
        static::registerFrameworks();
        static::registerStyles();
        static::registerScripts();
    }
 
    /**
     * NOTE: In PHP this function can be called either from Gantry DI container or statically.
     *
     * @param bool $addDomain
     * @return string
     */
    public static function domain($addDomain = false)
    {
        if (!$addDomain) {
            return '';
        }
 
        $absolute = \JUri::root(false);
        $relative = \JUri::root(true);
 
        return substr($absolute, 0, -strlen($relative));
    }
    public function getName()
    {
        return $this->name;
    }
 
    public function getEditor($name, $content = '', $width = null, $height = null)
    {
        return null;
    }
 
    public function filter($text)
    {
        return $text;
    }
 
    public function finalize()
    {
        $gantry = Gantry::instance();
 
        $gantry['document']->registerAssets();
    }
 
    public function call()
    {
        $args = func_get_args();
        $callable = array_shift($args);
        return is_callable($callable) ? call_user_func_array($callable, $args) : null;
    }
 
    public function authorize($action)
    {
        return true;
    }
 
    /**
     * @param array|string $dependencies
     * @return bool|null
     * @since 5.4.3
     */
    public function checkDependencies($dependencies)
            if ($ignoreStrictCheck || !$this->env->isStrictVariables()) {
                return;
            }
 
            throw new RuntimeError(sprintf('Neither the property "%1$s" nor one of the methods "%1$s()", "get%1$s()"/"is%1$s()" or "__call()" exist and have public access in class "%2$s".', $item, $class), -1, $this->getSourceContext());
        }
 
        if ($isDefinedTest) {
            return true;
        }
 
        if ($this->env->hasExtension('\Twig\Extension\SandboxExtension')) {
            $this->env->getExtension('\Twig\Extension\SandboxExtension')->checkMethodAllowed($object, $method);
        }
 
        // Some objects throw exceptions when they have __call, and the method we try
        // to call is not supported. If ignoreStrictCheck is true, we should return null.
        try {
            if (!$arguments) {
                $ret = $object->$method();
            } else {
                $ret = \call_user_func_array([$object, $method], $arguments);
            }
        } catch (\BadMethodCallException $e) {
            if ($call && ($ignoreStrictCheck || !$this->env->isStrictVariables())) {
                return;
            }
            throw $e;
        }
 
        // @deprecated in 1.28
        if ($object instanceof \Twig_TemplateInterface) {
            $self = $object->getTemplateName() === $this->getTemplateName();
            $message = sprintf('Calling "%s" on template "%s" from template "%s" is deprecated since version 1.28 and won\'t be supported anymore in 2.0.', $item, $object->getTemplateName(), $this->getTemplateName());
            if ('renderBlock' === $method || 'displayBlock' === $method) {
                $message .= sprintf(' Use block("%s"%s) instead).', $arguments[0], $self ? '' : ', template');
            } elseif ('hasBlock' === $method) {
                $message .= sprintf(' Use "block("%s"%s) is defined" instead).', $arguments[0], $self ? '' : ', template');
            } elseif ('render' === $method || 'display' === $method) {
                $message .= sprintf(' Use include("%s") instead).', $object->getTemplateName());
    // line 56
    public function block_body_bottom($context, array $blocks = [])
    {
        // line 57
        echo "    ";
    }
 
    // line 66
    public function block_page_head($context, array $blocks = [])
    {
        // line 67
        $this->loadTemplate("partials/page_head.html.twig", "@nucleus/page.html.twig", 67)->display($context);
    }
 
    // line 72
    public function block_page_footer($context, array $blocks = [])
    {
        // line 73
        echo "        ";
        $this->getAttribute($this->getAttribute(($context["gantry"] ?? null), "platform", []), "finalize", [], "method");
        // line 74
        echo twig_join_filter($this->getAttribute(($context["gantry"] ?? null), "scripts", [0 => "footer"], "method"), "
    ");
    }
 
    // line 80
    public function block_page($context, array $blocks = [])
    {
        // line 81
        echo "<!DOCTYPE ";
        echo (($this->getAttribute($this->getAttribute($this->getAttribute(($context["gantry"] ?? null), "config", [], "any", false, true), "page", [], "any", false, true), "doctype", [], "any", true, true)) ? (_twig_default_filter($this->getAttribute($this->getAttribute($this->getAttribute(($context["gantry"] ?? null), "config", [], "any", false, true), "page", [], "any", false, true), "doctype", []), "html")) : ("html"));
        echo ">
<html";
        // line 82
        echo $this->getAttribute($this->getAttribute(($context["gantry"] ?? null), "page", []), "htmlAttributes", []);
        echo ">
    ";
        // line 83
        echo ($context["page_head"] ?? null);
        echo "
 
        if ($useBlocks && isset($blocks[$name])) {
            $template = $blocks[$name][0];
            $block = $blocks[$name][1];
        } elseif (isset($this->blocks[$name])) {
            $template = $this->blocks[$name][0];
            $block = $this->blocks[$name][1];
        } else {
            $template = null;
            $block = null;
        }
 
        // avoid RCEs when sandbox is enabled
        if (null !== $template && !$template instanceof self) {
            throw new \LogicException('A block must be a method on a \Twig\Template instance.');
        }
 
        if (null !== $template) {
            try {
                $template->$block($context, $blocks);
            } catch (Error $e) {
                if (!$e->getSourceContext()) {
                    $e->setSourceContext($template->getSourceContext());
                }
 
                // this is mostly useful for \Twig\Error\LoaderError exceptions
                // see \Twig\Error\LoaderError
                if (-1 === $e->getTemplateLine()) {
                    $e->guess();
                }
 
                throw $e;
            } catch (\Exception $e) {
                $e = new RuntimeError(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $template->getSourceContext(), $e);
                $e->guess();
 
                throw $e;
            }
        } elseif (false !== $parent = $this->getParent($context)) {
            $parent->displayBlock($name, $context, array_merge($this->blocks, $blocks), false);
    }
 
    /**
     * Displays a parent block.
     *
     * This method is for internal use only and should never be called
     * directly.
     *
     * @param string $name    The block name to display from the parent
     * @param array  $context The context
     * @param array  $blocks  The current set of blocks
     */
    public function displayParentBlock($name, array $context, array $blocks = [])
    {
        $name = (string) $name;
 
        if (isset($this->traits[$name])) {
            $this->traits[$name][0]->displayBlock($name, $context, $blocks, false);
        } elseif (false !== $parent = $this->getParent($context)) {
            $parent->displayBlock($name, $context, $blocks, false);
        } else {
            throw new RuntimeError(sprintf('The template has no parent and no traits defining the "%s" block.', $name), -1, $this->getSourceContext());
        }
    }
 
    /**
     * Displays a block.
     *
     * This method is for internal use only and should never be called
     * directly.
     *
     * @param string $name      The block name to display
     * @param array  $context   The context
     * @param array  $blocks    The current set of blocks
     * @param bool   $useBlocks Whether to use the current set of blocks
     */
    public function displayBlock($name, array $context, array $blocks = [], $useBlocks = true)
    {
        $name = (string) $name;
 
    }
 
    protected function doGetParent(array $context)
    {
        // line 1
        return "@nucleus/page.html.twig";
    }
 
    protected function doDisplay(array $context, array $blocks = [])
    {
        $this->parent = $this->loadTemplate("@nucleus/page.html.twig", "partials/page.html.twig", 1);
        $this->parent->display($context, array_merge($this->blocks, $blocks));
    }
 
    // line 3
    public function block_page_footer($context, array $blocks = [])
    {
        // line 4
        echo "    ";
        $this->displayParentBlock("page_footer", $context, $blocks);
        echo "
    <jdoc:include type=\"modules\" name=\"debug\" />
";
    }
 
    public function getTemplateName()
    {
        return "partials/page.html.twig";
    }
 
    public function isTraitable()
    {
        return false;
    }
 
    public function getDebugInfo()
    {
        return array (  42 => 4,  39 => 3,  29 => 1,);
    }
 
 
        if ($useBlocks && isset($blocks[$name])) {
            $template = $blocks[$name][0];
            $block = $blocks[$name][1];
        } elseif (isset($this->blocks[$name])) {
            $template = $this->blocks[$name][0];
            $block = $this->blocks[$name][1];
        } else {
            $template = null;
            $block = null;
        }
 
        // avoid RCEs when sandbox is enabled
        if (null !== $template && !$template instanceof self) {
            throw new \LogicException('A block must be a method on a \Twig\Template instance.');
        }
 
        if (null !== $template) {
            try {
                $template->$block($context, $blocks);
            } catch (Error $e) {
                if (!$e->getSourceContext()) {
                    $e->setSourceContext($template->getSourceContext());
                }
 
                // this is mostly useful for \Twig\Error\LoaderError exceptions
                // see \Twig\Error\LoaderError
                if (-1 === $e->getTemplateLine()) {
                    $e->guess();
                }
 
                throw $e;
            } catch (\Exception $e) {
                $e = new RuntimeError(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $template->getSourceContext(), $e);
                $e->guess();
 
                throw $e;
            }
        } elseif (false !== $parent = $this->getParent($context)) {
            $parent->displayBlock($name, $context, array_merge($this->blocks, $blocks), false);
        // line 58
        echo "    ";
        echo twig_join_filter($this->getAttribute($this->getAttribute(($context["gantry"] ?? null), "document", []), "getHtml", [0 => "body_bottom"], "method"), "
    ");
        echo "
";
        $context["body_bottom"] = ('' === $tmp = ob_get_clean()) ? '' : new Markup($tmp, $this->env->getCharset());
        // line 61
        $this->getAttribute($this->getAttribute(($context["gantry"] ?? null), "document", []), "addScript", [0 => $this->env->getExtension('Gantry\Component\Twig\TwigExtension')->urlFunc("gantry-assets://js/main.js"), 1 => 11, 2 => "footer"], "method");
        // line 65
        ob_start(function () { return ''; });
        // line 66
        echo "    ";
        $this->displayBlock('page_head', $context, $blocks);
        $context["page_head"] = ('' === $tmp = ob_get_clean()) ? '' : new Markup($tmp, $this->env->getCharset());
        // line 71
        ob_start(function () { return ''; });
        // line 72
        echo "    ";
        $this->displayBlock('page_footer', $context, $blocks);
        // line 76
        echo "
    ";
        // line 77
        echo $this->getAttribute($this->getAttribute(($context["gantry"] ?? null), "debugger", []), "render", [], "method");
        echo "
";
        $context["page_footer"] = ('' === $tmp = ob_get_clean()) ? '' : new Markup($tmp, $this->env->getCharset());
        // line 80
        $this->displayBlock('page', $context, $blocks);
    }
 
    // line 8
    public function block_content($context, array $blocks = [])
    {
        // line 9
        echo "        ";
    }
 
    // line 19
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        }
 
        return ob_get_clean();
    }
 
    protected function displayWithErrorHandling(array $context, array $blocks = [])
    {
        try {
            $this->doDisplay($context, $blocks);
        } catch (Error $e) {
            if (!$e->getSourceContext()) {
                $e->setSourceContext($this->getSourceContext());
            }
 
            // this is mostly useful for \Twig\Error\LoaderError exceptions
            // see \Twig\Error\LoaderError
            if (-1 === $e->getTemplateLine()) {
                $e->guess();
            }
 
            throw $e;
        } catch (\Exception $e) {
            $e = new RuntimeError(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $this->getSourceContext(), $e);
            $e->guess();
 
            throw $e;
        }
    }
 
    {
        return $this;
    }
 
    /**
     * Returns all blocks.
     *
     * This method is for internal use only and should never be called
     * directly.
     *
     * @return array An array of blocks
     */
    public function getBlocks()
    {
        return $this->blocks;
    }
 
    public function display(array $context, array $blocks = [])
    {
        $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
    }
 
    public function render(array $context)
    {
        $level = ob_get_level();
        if ($this->env->isDebug()) {
            ob_start();
        } else {
            ob_start(function () { return ''; });
        }
        try {
            $this->display($context);
        } catch (\Exception $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
{
    public function __construct(Environment $env)
    {
        parent::__construct($env);
 
        $this->blocks = [
            'page_footer' => [$this, 'block_page_footer'],
        ];
    }
 
    protected function doGetParent(array $context)
    {
        // line 1
        return "@nucleus/page.html.twig";
    }
 
    protected function doDisplay(array $context, array $blocks = [])
    {
        $this->parent = $this->loadTemplate("@nucleus/page.html.twig", "partials/page.html.twig", 1);
        $this->parent->display($context, array_merge($this->blocks, $blocks));
    }
 
    // line 3
    public function block_page_footer($context, array $blocks = [])
    {
        // line 4
        echo "    ";
        $this->displayParentBlock("page_footer", $context, $blocks);
        echo "
    <jdoc:include type=\"modules\" name=\"debug\" />
";
    }
 
    public function getTemplateName()
    {
        return "partials/page.html.twig";
    }
 
    public function isTraitable()
    {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        }
 
        return ob_get_clean();
    }
 
    protected function displayWithErrorHandling(array $context, array $blocks = [])
    {
        try {
            $this->doDisplay($context, $blocks);
        } catch (Error $e) {
            if (!$e->getSourceContext()) {
                $e->setSourceContext($this->getSourceContext());
            }
 
            // this is mostly useful for \Twig\Error\LoaderError exceptions
            // see \Twig\Error\LoaderError
            if (-1 === $e->getTemplateLine()) {
                $e->guess();
            }
 
            throw $e;
        } catch (\Exception $e) {
            $e = new RuntimeError(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $this->getSourceContext(), $e);
            $e->guess();
 
            throw $e;
        }
    }
 
    {
        return $this;
    }
 
    /**
     * Returns all blocks.
     *
     * This method is for internal use only and should never be called
     * directly.
     *
     * @return array An array of blocks
     */
    public function getBlocks()
    {
        return $this->blocks;
    }
 
    public function display(array $context, array $blocks = [])
    {
        $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
    }
 
    public function render(array $context)
    {
        $level = ob_get_level();
        if ($this->env->isDebug()) {
            ob_start();
        } else {
            ob_start(function () { return ''; });
        }
        try {
            $this->display($context);
        } catch (\Exception $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
{
    public function __construct(Environment $env)
    {
        parent::__construct($env);
 
        $this->blocks = [
            'content' => [$this, 'block_content'],
        ];
    }
 
    protected function doGetParent(array $context)
    {
        // line 1
        return "partials/page.html.twig";
    }
 
    protected function doDisplay(array $context, array $blocks = [])
    {
        $this->parent = $this->loadTemplate("partials/page.html.twig", "index.html.twig", 1);
        $this->parent->display($context, array_merge($this->blocks, $blocks));
    }
 
    // line 3
    public function block_content($context, array $blocks = [])
    {
        // line 4
        echo "    ";
        echo $this->getAttribute($this->getAttribute(($context["gantry"] ?? null), "platform", []), "displayContent", [0 => ($context["content"] ?? null)], "method");
        echo "
";
    }
 
    public function getTemplateName()
    {
        return "index.html.twig";
    }
 
    public function isTraitable()
    {
        return false;
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        }
 
        return ob_get_clean();
    }
 
    protected function displayWithErrorHandling(array $context, array $blocks = [])
    {
        try {
            $this->doDisplay($context, $blocks);
        } catch (Error $e) {
            if (!$e->getSourceContext()) {
                $e->setSourceContext($this->getSourceContext());
            }
 
            // this is mostly useful for \Twig\Error\LoaderError exceptions
            // see \Twig\Error\LoaderError
            if (-1 === $e->getTemplateLine()) {
                $e->guess();
            }
 
            throw $e;
        } catch (\Exception $e) {
            $e = new RuntimeError(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $this->getSourceContext(), $e);
            $e->guess();
 
            throw $e;
        }
    }
 
    {
        return $this;
    }
 
    /**
     * Returns all blocks.
     *
     * This method is for internal use only and should never be called
     * directly.
     *
     * @return array An array of blocks
     */
    public function getBlocks()
    {
        return $this->blocks;
    }
 
    public function display(array $context, array $blocks = [])
    {
        $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
    }
 
    public function render(array $context)
    {
        $level = ob_get_level();
        if ($this->env->isDebug()) {
            ob_start();
        } else {
            ob_start(function () { return ''; });
        }
        try {
            $this->display($context);
        } catch (\Exception $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
    public function getBlocks()
    {
        return $this->blocks;
    }
 
    public function display(array $context, array $blocks = [])
    {
        $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
    }
 
    public function render(array $context)
    {
        $level = ob_get_level();
        if ($this->env->isDebug()) {
            ob_start();
        } else {
            ob_start(function () { return ''; });
        }
        try {
            $this->display($context);
        } catch (\Exception $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        }
 
        return ob_get_clean();
    }
 
    protected function displayWithErrorHandling(array $context, array $blocks = [])
    {
        try {
     * @internal
     */
    public function __construct(Environment $env, Template $template)
    {
        $this->env = $env;
        $this->template = $template;
    }
 
    /**
     * Renders the template.
     *
     * @param array $context An array of parameters to pass to the template
     *
     * @return string The rendered template
     */
    public function render($context = [])
    {
        // using func_get_args() allows to not expose the blocks argument
        // as it should only be used by internal code
        return $this->template->render($context, \func_num_args() > 1 ? func_get_arg(1) : []);
    }
 
    /**
     * Displays the template.
     *
     * @param array $context An array of parameters to pass to the template
     */
    public function display($context = [])
    {
        // using func_get_args() allows to not expose the blocks argument
        // as it should only be used by internal code
        $this->template->display($context, \func_num_args() > 1 ? func_get_arg(1) : []);
    }
 
    /**
     * Checks if a block is defined.
     *
     * @param string $name    The block name
     * @param array  $context An array of parameters to pass to the template
     *
        @trigger_error(sprintf('The %s method is deprecated since version 1.22 and will be removed in Twig 2.0.', __METHOD__), E_USER_DEPRECATED);
 
        return $this->templateClassPrefix;
    }
 
    /**
     * Renders a template.
     *
     * @param string|TemplateWrapper $name    The template name
     * @param array                  $context An array of parameters to pass to the template
     *
     * @return string The rendered template
     *
     * @throws LoaderError  When the template cannot be found
     * @throws SyntaxError  When an error occurred during compilation
     * @throws RuntimeError When an error occurred during rendering
     */
    public function render($name, array $context = [])
    {
        return $this->load($name)->render($context);
    }
 
    /**
     * Displays a template.
     *
     * @param string|TemplateWrapper $name    The template name
     * @param array                  $context An array of parameters to pass to the template
     *
     * @throws LoaderError  When the template cannot be found
     * @throws SyntaxError  When an error occurred during compilation
     * @throws RuntimeError When an error occurred during rendering
     */
    public function display($name, array $context = [])
    {
        $this->load($name)->display($context);
    }
 
    /**
     * Loads a template.
     *
 
            $this->renderer = $this->extendTwig($twig, $loader);
        }
 
        return $this->renderer;
    }
 
    /**
     * Render a template file by using given context.
     *
     * @param string $file
     * @param array $context
     * @return string
     */
    public function render($file, array $context = [])
    {
        // Include Gantry specific things to the context.
        $context = $this->getContext($context);
 
        return $this->renderer()->render($file, $context);
    }
 
    /**
     * Compile and render twig string.
     *
     * @param string $string
     * @param array $context
     * @return string
     */
    public function compile($string, array $context = [])
    {
        $renderer = $this->renderer();
        $template = $renderer->createTemplate($string);
 
        // Include Gantry specific things to the context.
        $context = $this->getContext($context);
 
        return $template->render($context);
    }
 
 * @copyright Copyright (C) 2007 - 2015 RocketTheme, LLC
 * @license   GNU/GPLv2 and later
 *
 * http://www.gnu.org/licenses/gpl-2.0.html
 */
 
defined('_JEXEC') or die;
 
// Bootstrap Gantry framework or fail gracefully (inside included file).
$gantry = include __DIR__ . '/includes/gantry.php';
 
/** @var \Gantry\Framework\Theme $theme */
$theme = $gantry['theme'];
 
/** @var \Gantry\Framework\Configurations $configurations */
$configurations = $gantry['configurations'];
 
// Render the page.
echo $theme
    ->render('index.html.twig');
 
     * @param   string  $directory  The name of the template
     * @param   string  $filename   The actual filename
     *
     * @return  string  The contents of the template
     *
     * @since   1.7.0
     */
    protected function _loadTemplate($directory, $filename)
    {
        $contents = '';
 
        // Check to see if we have a valid template file
        if (file_exists($directory . '/' . $filename))
        {
            // Store the file path
            $this->_file = $directory . '/' . $filename;
 
            // Get the file content
            ob_start();
            require $directory . '/' . $filename;
            $contents = ob_get_contents();
            ob_end_clean();
        }
 
        // Try to find a favicon by checking the template and root folder
        $icon = '/favicon.ico';
 
        foreach (array($directory, JPATH_BASE) as $dir)
        {
            if (file_exists($dir . $icon))
            {
                $path = str_replace(JPATH_BASE, '', $dir);
                $path = str_replace('\\', '/', $path);
                $this->addFavicon(Uri::base(true) . $path . $icon);
                break;
            }
        }
 
        return $contents;
    }
 
        if (!file_exists($directory . '/' . $template . '/' . $file))
        {
            $file = 'index.php';
        }
 
        // Load the language file for the template
        $lang = \JFactory::getLanguage();
 
        // 1.5 or core then 1.6
        $lang->load('tpl_' . $template, JPATH_BASE, null, false, true)
            || $lang->load('tpl_' . $template, $directory . '/' . $template, null, false, true);
 
        // Assign the variables
        $this->template = $template;
        $this->baseurl = Uri::base(true);
        $this->params = isset($params['params']) ? $params['params'] : new Registry;
 
        // Load
        $this->_template = $this->_loadTemplate($directory . '/' . $template, $file);
 
        return $this;
    }
 
    /**
     * Parse a document template
     *
     * @return  HtmlDocument  instance of $this to allow chaining
     *
     * @since   1.7.0
     */
    protected function _parseTemplate()
    {
        $matches = array();
 
        if (preg_match_all('#<jdoc:include\ type="([^"]+)"(.*)\/>#iU', $this->_template, $matches))
        {
            $template_tags_first = array();
            $template_tags_last = array();
 
            $options['title'] = (isset($args[3])) ? $args[3] : null;
        }
 
        parent::$_buffer[$options['type']][$options['name']][$options['title']] = $content;
 
        return $this;
    }
 
    /**
     * Parses the template and populates the buffer
     *
     * @param   array  $params  Parameters for fetching the template
     *
     * @return  HtmlDocument instance of $this to allow chaining
     *
     * @since   1.7.0
     */
    public function parse($params = array())
    {
        return $this->_fetchTemplate($params)->_parseTemplate();
    }
 
    /**
     * Outputs the template to the browser.
     *
     * @param   boolean  $caching  If true, cache the output
     * @param   array    $params   Associative array of attributes
     *
     * @return  string The rendered data
     *
     * @since   1.7.0
     */
    public function render($caching = false, $params = array())
    {
        $this->_caching = $caching;
 
        if (empty($this->_template))
        {
            $this->parse($params);
        }
     */
    protected function render()
    {
        // Setup the document options.
        $this->docOptions['template'] = $this->get('theme');
        $this->docOptions['file']     = $this->get('themeFile', 'index.php');
        $this->docOptions['params']   = $this->get('themeParams');
 
        if ($this->get('themes.base'))
        {
            $this->docOptions['directory'] = $this->get('themes.base');
        }
        // Fall back to constants.
        else
        {
            $this->docOptions['directory'] = defined('JPATH_THEMES') ? JPATH_THEMES : (defined('JPATH_BASE') ? JPATH_BASE : __DIR__) . '/themes';
        }
 
        // Parse the document.
        $this->document->parse($this->docOptions);
 
        // Trigger the onBeforeRender event.
        \JPluginHelper::importPlugin('system');
        $this->triggerEvent('onBeforeRender');
 
        $caching = false;
 
        if ($this->isClient('site') && $this->get('caching') && $this->get('caching', 2) == 2 && !\JFactory::getUser()->get('id'))
        {
            $caching = true;
        }
 
        // Render the document.
        $data = $this->document->render($caching, $this->docOptions);
 
        // Set the application output data.
        $this->setBody($data);
 
        // Trigger the onAfterRender event.
        $this->triggerEvent('onAfterRender');
                    $this->setUserState('users.login.form.data', array('return' => \JUri::getInstance()->toString()));
                    $this->set('themeFile', 'offline.php');
                    $this->setHeader('Status', '503 Service Temporarily Unavailable', 'true');
                }
 
                if (!is_dir(JPATH_THEMES . '/' . $template->template) && !$this->get('offline'))
                {
                    $this->set('themeFile', 'component.php');
                }
 
                // Ensure themeFile is set by now
                if ($this->get('themeFile') == '')
                {
                    $this->set('themeFile', $file . '.php');
                }
 
                break;
        }
 
        parent::render();
    }
 
    /**
     * Route the application.
     *
     * Routing is the process of examining the request environment to determine which
     * component should receive the request. The component optional parameters
     * are then set in the request object to be processed when the application is being
     * dispatched.
     *
     * @return  void
     *
     * @since   3.2
     */
    protected function route()
    {
        // Execute the parent method
        parent::route();
 
        $Itemid = $this->input->getInt('Itemid', null);
        }
    }
 
    /**
     * Execute the application.
     *
     * @return  void
     *
     * @since   3.2
     */
    public function execute()
    {
        // Perform application routines.
        $this->doExecute();
 
        // If we have an application document object, render it.
        if ($this->document instanceof \JDocument)
        {
            // Render the application output.
            $this->render();
        }
 
        if ($this->get('block_floc', 1))
        {
            $headers = $this->getHeaders();
 
            $notPresent = true;
 
            foreach ($headers as $header)
            {
                if (strtolower($header['name']) === 'permissions-policy')
                {
                    // Append interest-cohort if the Permissions-Policy is not set
                    if (strpos($header['value'], 'interest-cohort') === false)
                    {
                        $this->setHeader('Permissions-Policy', $header['value'] . ', interest-cohort=()', true);
                    }
 
                    $notPresent = false;
 
{
    include_once __DIR__ . '/defines.php';
}
 
if (!defined('_JDEFINES'))
{
    define('JPATH_BASE', __DIR__);
    require_once JPATH_BASE . '/includes/defines.php';
}
 
require_once JPATH_BASE . '/includes/framework.php';
 
// Set profiler start time and memory usage and mark afterLoad in the profiler.
JDEBUG ? JProfiler::getInstance('Application')->setStart($startTime, $startMem)->mark('afterLoad') : null;
 
// Instantiate the application.
$app = JFactory::getApplication('site');
 
// Execute the application.
$app->execute();
 

Environment & details:

empty
empty
empty
empty
empty
Key Value
PATH /usr/local/bin:/bin:/usr/bin
HTTP_ACCEPT */*
HTTP_HOST www.mosselbaygolfclub.co.za
HTTP_USER_AGENT claudebot
HTTP_X_HTTPS 1
DOCUMENT_ROOT /home/setperk/public_html
REMOTE_ADDR 52.55.214.236
REMOTE_PORT 44782
SERVER_ADDR 41.76.109.62
SERVER_NAME www.mosselbaygolfclub.co.za
SERVER_ADMIN webmaster@mosselbaygolfclub.co.za
SERVER_PORT 443
REQUEST_SCHEME https
REQUEST_URI /
HTTPS on
HTTP_AUTHORIZATION
X_SPDY HTTP2
SSL_PROTOCOL TLSv1.3
SSL_CIPHER TLS_AES_256_GCM_SHA384
SSL_CIPHER_USEKEYSIZE 256
SSL_CIPHER_ALGKEYSIZE 256
SCRIPT_FILENAME /home/setperk/public_html/index.php
QUERY_STRING
SCRIPT_URI https://www.mosselbaygolfclub.co.za/
SCRIPT_URL /
SCRIPT_NAME /index.php
SERVER_PROTOCOL HTTP/1.1
SERVER_SOFTWARE LiteSpeed
REQUEST_METHOD GET
X-LSCACHE on
PHP_SELF /index.php
REQUEST_TIME_FLOAT 1711644174.6635
REQUEST_TIME 1711644174
empty
0. Whoops\Handler\PrettyPageHandler